הדבר שמפתיע אנשים בהמרת מסמך הוא שאין דף בקובץ להמרה. .docx מכיל פסקאות, סגנונות והערה לגבי גודל הנייר, והעמוד שאתה רואה על המסך מופק על ידי Word Doing Layout ברגע שאתה פותח אותו. כל תוכנית אחרת צריכה לעשות את הפריסה הזו שוב, עם הגופנים שלה ופריצת שורות משלה, וזו הסיבה ששני ממירים נותנים שתי ספירות עמודים שונות מקובץ אחד. הבנה שעובדה אחת מסבירה כל הפתעה בפלט, כולל זו שבה מחיקה במעקב שחשבת שנעלמה מופיעה ב-PDF.
TL;DR: .docx הוא zip של XML הנושא מבנה אמיתי, כך שכותרות, פסקאות ורשימות מגיעות בצורה נכונה במקום להסיק. מה שלא מגיע הוא המראה: גופנים, עמודות, טבלאות, עצירות כרטיסיות, מספור ומרווח מדויק בשידור חי בחלקים שממיר צריך ליישם מעבד תמלילים כדי לכבד. נמדד בקלט אמיתי, מחיקות מעקב נשמטות כך שמסמך ערוך נקרא כניסוח הסופי שלו, רשימה ממוספרת חוזרת עם תבליטים, טבלה הופכת לתאים שלה בסדר קריאה, וכרטיסייה הופכת לרווח. עיבוד טקסט מערב אירופאי; קירילי, יווני, CJK ואימוג'י לא, כי גופני ה-PDF המובנים הם Winansi. כְּכ ממיר וורד ל-PDF עושה את ההגדרה בדפדפן שלך.
מה יש בתוך .docx?
מיקוד של חלקי XML, ואחד מהם מכיל את כל מה שחשוב כאן.
פתח כל .docx עם כלי ארכיון ותמצא word/document.xml לצד מניפסט, חלק ליחסים, ובדרך כלל סגנונות, גופנים, ערכות נושא, הגדרות מספור והגדרות. הפורמט הוא ECMA-376, עם של מיקרוסופט משלו הערות יישום מכסה את המילה עושה על זה.
חלק המסמך הוא רצף של <w:p> אלמנטים. כל אחד מהם הוא פסקה, עם מאפיינים אופציונליים האומרים באיזה סגנון הוא משתמש והאם הוא שייך לרשימה, ובתוכה סדרה של ריצות הנושאות את הטקסט בפועל <w:t>.
זה באמת טוב יותר ממה שמציע PDF. ב-PDF יש להסיק פסקה מהפער האנכי בין השורות, שהוא המקום בו ההמרה בכיוון השני מאבד עמודות וטבלאות. כאן פסקה היא פסקה מכיוון שהקובץ אומר זאת, וכותרת היא כותרת מכיוון שהפסקה נותנת כותרת לסגנון כותרת.
התפיסה נמצאת בחלקים שממיר לא קורא.
למה התוצאה לא נראית כמו ב-Word?
מכיוון שהמראה מתפזר על פני חלקים שמסתכמים במעבד תמלילים, והממיר מגדיר את הטקסט מחדש במקום זאת.
הטקסט נמצא בחלק המסמך. הסיבה שהטקסט שלך מופיע ב-Calibri ב-11 נקודות עם מרווח שורות של 1.08 היא ב- styles.xml. הסיבה שהרשימה שלך קוראת "1., 2., 3." במקום "a., b., c." נמצאת ב numbering.xml. ערכת הנושא המספקת את צבע הכותרת נמצאת שוב בחלק אחר, ומאפייני החתך שולטים בשוליים, עמודות וגודל עמוד לכל קטע.
לכבוד כל זה הוא בניית מנוע פריסה עם סמנטיקה של Word. מה שהכלי הזה עושה במקום זה הוא לקרוא את המבנה ולפרוס אותו בצורה נקייה: Times Roman לגוף טקסט, Times Roman Bold לכותרות, שוליים של 56 נקודות, מרווח שורות של 1.4, בגודל העמוד שתבחר.
אז הפלט הוא מסמך קריא, מסודר כהלכה, שאינו נראה כמו המקור. זו מגבלה אמיתית וכדאי להצהיר בצורה ברורה במקום לקבור, כי האנשים שמחפשים את ההמרה הזו מתחלקים לשתי קבוצות ורק אחת מהן משרתת. אם אתה רוצה את הטקסט כקובץ PDF שכל אחד יכול לפתוח, זה נכון. אם אתה רוצה הדף הזה, עם הגופנים שלו והמרווחים שלו, המשיכו לקרוא את הקטע על הייצוא של Word.
מה שורד את ההמרה?
מבנה וסדר קריאה, בצורה מהימנה. הנה הרשימה המלאה, הנמדדת מול הקוד ולא בהנחה.
| אלמנט | תוצאה |
|---|---|
| פֶלֶ | נשמר, בסדר מסמכים |
| כְּנִיסָה | נשמר, בגודל לפי רמה, מוגדר מודגש |
| רשימת פריטים | טקסט נשמר, סמן מוחלף בכדור |
| תאי שולחן | נשמר כפסקאות נפרדות בסדר הקריאה |
| עוקבים אחר מחיקות | ירד, כפי ש-Word מציגה אותם |
| כרטיסיות ומעברי שורות | להפוך לחלל בודד |
| מודגש, נטוי, צבע, גופן | לא נישא |
| תמונות | לא נישא |
| כותרות עליונות, כותרות תחתונות, מספרי עמודים | לא נישא |
| הערות שוליים והערות סיום | לא נישא |
החצי העליון של הטבלה הזו הוא הסיבה שההמרה הזו עדיין שווה לעשות: שום דבר בה לא היה צריך לנחש. החצי התחתון הוא המחיר של אי יישום וורד.
מה קורה לשינויים במעקב?
המחיקות נעלמות, וזה נכון, והעובדה שצריך לומר היא החלק המעניין.
מסמך שנערך עם מעקב אחר שינויים שומר את הטקסט שהוסר בקובץ, בפנים <w:delText> בתוך א <w:del> אלמנט. Word יודע לא להציג את זה כטקסט עדכני. ממיר שהולך על כל צומת טקסט לא עושה זאת, אלא אם מישהו חשב על זה.
נמדד בפסקה שקרא במקור "המועד האחרון הוא 31 במרץ" ונערך ל- "30 באפריל":
with the rule: The deadline is 30 April.
without the rule: The deadline is 31 March30 April.
כל גרסה של המשפט הזה שמישהו אי פעם הקלידו, רץ יחד, בלי רווח ביניהם. על חוזה או מכתב הצעה זה לא באג קוסמטי: הוא מפרסם את היסטוריית המשא ומתן של המסמך למי שמקבל את ה-PDF.
שווה לדעת לשמה, בכל כלי שתשתמש בו. אם אתה שולח מסמך שהומר כלפי חוץ, בדוק שתאריך או נתון ששינית מופיעים פעם אחת ולא פעמיים.
מה קורה לרשימה ממוספרת?
זה חוזר עם תבליטים, כי המספרים לא נמצאים בפסקה.
פסקה של רשימה נושאת <w:numPr>, המצביע על הגדרת מספור בחלק אחר. הגדרה זו מכילה את הפורמט, ערך ההתחלה, רמות ההזנה והאם רשימה זו ממשיכה בקודמת. הפסקה עצמה מכילה את הטקסט ולא שום דבר אחר.
אז ממיר שקורא רק את חלק המסמך יודע שהפסקה היא פריט רשימה ולא איזה סמן הוא צריך לשאת. עיבוד כדור הוא ברירת המחדל הכנה:
• First point
• Second point
Ordinary paragraph
זה משנה כאשר למספרים יש משמעות. "ראה שלב 4" בהליך, או סעיף ממוספר בהסכם, מאבד את הפניה שלו. אם המסמך שלך תלוי במספור שלו, ההמרה הזו היא השגויה, והייצוא של Word הוא הנכון.
מה קורה לשולחן?
התאים שורדים, הרשת לא.
תא טבלה מכיל <w:p> אלמנטים כמו כל דבר אחר, כך שהטקסט מגיע כפסקאות רגילות בסדר הקריאה. טבלת שתי עמודות של אזורים ודמויות יוצאת כ:
Region | Q2 | EMEA | 412
ארבע פסקאות, בזו אחר זו, בלי שום דבר שרשם שהשתיים הראשונות היו שורת כותרת. נשיאת הטבלה על פני פירושו נשיאת רוחבי עמודים, מבנה שורות, תאים וגבולות ממוזגים, ולאחר מכן פריסת רשת שמסתובבת, שהיא כלי שונה וגדול בהרבה.
זה אותו מסחר בשני הכיוונים. PDF ל-Word משטח טבלה מכיוון של-PDF מעולם לא היה אחד; Word to PDF משטח אותו כי בנייה מחדש של אחד הוא מנוע פריסה. העצה הכנה בשני המקרים: אם הטבלה היא הנקודה, צלם אותה או שמור את המקור.
מדוע התמוטט הפריסה המיושרת ל-Tab?
מכיוון שלשונית היא הוראת מיקום, וללא עצירות טאב אין לאן לשלוח אותה.
<w:tab/> פירושו "התקדמות לעצירת הכרטיסייה הבאה", והעצירות מוגדרות במאפייני הפסקה או עוברות בירושה מהסגנון שלה. לממיר שמציב טקסט עם שוליים משלו אין עצירה משמעותית לקפוץ אליו, כך שהכרטיסייה הופכת לרווח בודד. אותו דבר לגבי <w:br/>:
input: Name <tab> Value <br> Next line
output: "Name Value Next line"
כל מי שבנה רשימת שתי עמודות, בלוק חתימה או תוכן עניינים פשוט עם כרטיסיות מאבד את היישור לחלוטין. זו אחת הדרכים הנפוצות יותר שמסמך שהומר נראה שגוי, והוא בלתי נראה במקור: הקובץ נראה כמו פסקאות רגילות כי זה מה שהוא.
אם היישור משנה, טבלה אמיתית במסמך המקור אינה ממירה טוב יותר, אבל היא לפחות נכשלת בצורה ברורה יותר.
אילו תווים לא יכולים גופני ה-PDF המובנים לרנדר?
כל דבר מחוץ ללטיני מערב אירופה, והכישלון נהג לשתוק לגבי הדמות שבה אשמה.
תקן ה-PDF מגדיר ארבעה עשר גופני בסיס שיש לכל קורא, והם מקודדים ב-WinansiEncoding, סט של 256 תווים המתועד בנספח D של מפרט ה-PDF. השימוש בהם אומר שאין להטמיע גופן, מה ששומר על הפלט קטן, וזה אומר שהאלפבית קבוע.
נבדק עם pdf-lib, הספרייה עושה את הציור:
| טקסט | תוצאה |
|---|---|
Quarterly report |
טִירוֹן |
"Revenue" rose, he'd said עם ציטוטים מתולתלים |
טִירוֹן |
| משפט באמצעות מקפים em, u+2014 | טִירוֹן |
Chiffre d'affaires réalisé en Août |
טִירוֹן |
Total: €1,249.50 |
טִירוֹן |
Отчёт за квартал |
נכשל: WinAnsi cannot encode "О" (0x041e) |
Αποτελέσματα |
נכשל: WinAnsi cannot encode "Α" (0x0391) |
季度报告 |
נכשל: WinAnsi cannot encode "季" (0x5b63) |
四半期報告 |
נכשל: WinAnsi cannot encode "四" (0x56db) |
Revenue up 🚀 |
נכשל: WinAnsi cannot encode "🚀" (0x1f680) |
צרפתית, גרמנית, ספרדית, פורטוגזית, איטלקית והשפות הנורדיות בסדר, וכך גם סימן היורו, ציטוטים מתולתלים ומקף em. רוסית, יוונית, סינית, יפנית, קוריאנית, ערבית, עברית, הינדית וכל אימוג'י לא.
הכלי מציין כעת את התו בשגיאה במקום לומר שלא ניתן להמיר את המסמך, מכיוון ש "הסר את התו הזה" הוא עצה ו- "משהו השתבש" לא. מסמך באחד מאותם סקריפטים זקוק לממיר שמטמיע גופן המכסה אותו, כלומר PDF גדול יותר וכלי אחר.
מדוע קובץ .doc מסורב?
כי .doc ו-.docx הם פורמטים שונים החולקים שלוש אותיות.
.docx הוא zip של XML, שהוצג ב-2007. .doc הוא קובץ בינארי מורכב בפריסה המתוארכת לתחילת התשעים, כאשר הטקסט משולב בין מבנים שמנתח צריך ללכת. קריאה של אחד אינה וריאציה על קריאת השני; זה יישום נפרד.
אז הממיר בודק את ההרחבה ואומר זאת, במקום להיכשל ב-zip בלתי קריא:
| קובץ | מה שכתוב |
|---|---|
.doc |
זה הפורמט הישן יותר. פתח אותו ושמור כ-.docx תחילה |
.rtf, .odt, .pages |
לא מסמך Word. ייצוא כ-.docx |
.pdf |
כבר PDF; השתמש בכיוון השני עבור קובץ הניתן לעריכה |
פתיחת .doc ב-word, libreoffice או Google docs ושמירה כ-.docx לוקח כמה שניות והיא המרה שהתוכניות הללו מצליחות.
איך גודל הכותרות ועד כמה הם הולכים?
לפי רמה, נועז, כשהכל עבר את הרמה השלישית התייחסו כשלישית.
שם הסגנון נקרא מפסקה ומנורמל, מכיוון ששני האיותים קיימים בטבע. מילה כותבת Heading1; מספר מחוללי מסמכים כותבים heading 1. שניהם נפתרים לאותה רמה, ו Title מתייחסים אליו כרמה אחת.
| סגנון בקובץ | רמה משומשת |
|---|---|
Title, Heading1, heading 1 |
1 |
Heading2 |
2 |
Heading3 |
3 |
Heading4 דרך Heading9 |
3 |
ListParagraph, BodyText, כל דבר אחר |
טקסט גוף |
שלוש רמות חזותיות הן נקודת עצירה מכוונת. רמה רביעית המבדילה מהשלישית זקוקה לשלב גודל אחר, שמתחיל להתנגש בגוף הטקסט, או שינוי משקל או סגנון שהגופנים הבסיסיים אינם מספקים.
כמה עמודים יהיה ה-PDF?
לא מילת המספר הראתה לך, וההבדל הוא לא באג.
שבירת שורות תלויה בגופן, כך שאותה פסקה ב-Times Roman ב-12 נקודות תופסת מספר שורות שונה מזו שעשתה ב-Calibri ב-11. השוליים שונים. מרווח השורות שונה. כל מה שמחליט היכן מסתיימת קו השתנה, אז העימוד משתנה איתו.
בריצה מדודה, מסמך של כותרת אחת ועשר פסקאות של כארבעים מילים כל אחד מונח כשני עמודי A4: 39 שורות בראשון ו-2 בשנייה, כשהכותרת מוגדרת ל-20.4 נקודות מודגש מול 12 נקודות גוף.
התוצאה המעשית היא שהפניות לדף נשברות. "כמתואר בעמוד 7" במסמך שהומר עשוי להיות כעת עמוד 6 או עמוד 8. יש לייצא מסמך שמצליב את הדפים שלו מ-Word, כאשר הפריסה היא זו שההפניות נכתבו נגדן.
מתי עליך להשתמש בייצוא של Word עצמו במקום זאת?
בכל פעם שהמראה או העימוד הם חלק מהתוכן. זו רשימה קצרה יותר ממה שזה נשמע, אבל הפריטים עליה חשובים.
| השתמש בייצוא של Word | השתמש בממיר |
|---|---|
| מסמך מעוצב: נייר מכתבים, קורות חיים, דוח עם מיתוג | מסמך טקסט רגיל שאתה צריך כקובץ PDF |
| כל דבר עם טבלאות, תמונות, כותרות עליונות או תחתונות | הערות, מאמר, טיוטה, תמליל |
| סעיפים ממוספרים או דפים מוצלבים | כל מסמך שבו סדר קריאה הוא כל מה שאתה צריך |
| מסמך בכתב לא לטיני | מסמך שאתה מעדיף לא להעלות בשום מקום |
קובץ Word, Save As, PDF הוא ייצוא אמיתי: אותו מנוע פריסה שצייר את הדף כותב את ה-PDF, אז מה שאתה רואה זה מה שאתה מקבל. שום דבר בדפדפן לא תואם את זה, כי שום דבר בדפדפן לא כולל את מנוע הפריסה של Word.
המקרה להמרה בכלל הוא השורה האחרונה של הטבלה הזו, בנוסף לא להיות בעל מילה בהישג יד.
למה זה פועל בדפדפן?
מכיוון שמסמכים הם הקבצים האישיים ביותר שאנשים ממירים, וההמרה הזו לא צריכה שום דבר שיש לשרת.
קריאת zip, ניתוח XML וציור טקסט הם כל הדברים שדפדפן עושה באופן מקורי. הקובץ נקרא מהדיסק שלך ללשונית, נפתח שם, מונח שם, כתוב שם ל-PDF ומוחזר כהורדה. שום בקשה לא נושאת את המסמך ולא נשאר עותק בשום מקום.
המסמכים המדוברים הם חוזים, קורות חיים, מכתבים רפואיים, טיוטות משפטיות ועבודות גמר. האלטרנטיבה המקובלת מעלה אותם לשירות, ממירה אותם במכונה שאינך יודע עליה דבר, ושומרת אותם לתקופה מסוימת המתוארת במדיניות שאיש לא קורא.
הגבולות הם כנים: טקסט מערב אירופאי בלבד, ללא תמונות, ללא עיצוב מעבר לכותרות וכדורים. הם גלויים לפני שמתחילים במקום להתגלות לאחר מכן, וזה הסחר ששווה לקחת כאשר האלטרנטיבה היא PDF יפה יותר למראה של מסמך שאתה כבר לא שולט בו.



