คุณมีหลายทางเลือก วิธีการทั้งหมดเหล่านี้ทำงานบน Linux เช่นเดียวกับ Windows หรือ Mac OS X อย่างไรก็ตามโปรดทราบว่า PDF ส่วนใหญ่ไม่รวมถึงแบบอักษรที่สมบูรณ์และสมบูรณ์แบบเมื่อมีแบบอักษรฝังอยู่ ส่วนใหญ่จะมีเพียงชุดย่อยของร่ายมนตร์ที่ใช้ในเอกสาร
การใช้ pdftops
หนึ่งในวิธีที่ใช้บ่อยที่สุดในการทำเช่นนี้ในระบบ * nix ประกอบด้วยขั้นตอนต่อไปนี้:
- แปลง PDF เป็น PostScript ตัวอย่างเช่นโดยใช้ XPDF's
pdftops
(บนโปรแกรม Windows: pdftops.exe
helper
- ตอนนี้ตัวอักษรจะถูกฝังอยู่ใน
.pfa
รูปแบบ (PostScript) + คุณสามารถสกัดพวกเขาโดยใช้โปรแกรมแก้ไขข้อความ
- คุณอาจจะต้องแปลง
.pfa
(ASCII) ไปยัง.pfb
ไฟล์ (binary) ใช้และt1utils
pfa2pfb
- ใน PDF ไม่มีไฟล์
.pfm
หรือ.afm
ไฟล์ (ไฟล์เมตริกแบบอักษร) (เนื่องจากโปรแกรมดู PDF มีความรู้เกี่ยวกับสิ่งเหล่านี้) หากไม่มีสิ่งเหล่านี้ไฟล์ฟอนต์จะใช้งานได้แทบจะไม่เป็นที่ชื่นชอบ
การใช้ fontforge
วิธีอื่นคือการใช้ตัวแก้ไขแบบอักษรฟรีFontForge :
- ใช้กล่องโต้ตอบ"Open Font" ที่ใช้เมื่อเปิดไฟล์
- จากนั้นเลือก"แยกจาก PDF"ในส่วนตัวกรองของกล่องโต้ตอบ
- เลือกไฟล์ PDF ที่มีแบบอักษรที่จะแตกออกมา
- "เลือกแบบอักษร" DialogBox เปิด - เลือกที่นี่ซึ่งตัวอักษรที่จะเปิด
ตรวจสอบคู่มือ FontForge คุณอาจต้องทำตามขั้นตอนบางอย่างซึ่งไม่จำเป็นต้องตรงไปตรงมาเพื่อบันทึกข้อมูลแบบอักษรที่แยกออกมาเป็นไฟล์ที่สามารถใช้งานได้อีกครั้ง
การใช้ mupdf
ถัดไปMuPDF แอปพลิเคชันนี้มาพร้อมกับยูทิลิตี้ที่เรียกว่าpdfextract
(บน Windows:) pdfextract.exe
ซึ่งสามารถแยกแบบอักษรและรูปภาพจาก PDF (ในกรณีที่คุณไม่ทราบเกี่ยวกับ MuPDF ซึ่งยังไม่เป็นที่รู้จักและใหม่: "MuPDF เป็นโปรแกรมดู PDF และเครื่องมือเขียนน้ำหนักเบาฟรีที่เขียนด้วยพกพา C"ซึ่งเขียนโดยนักพัฒนาซอฟต์แวร์ Artifex ซึ่งเป็น บริษัท เดียวกันที่ให้ Ghostscript แก่เรา )
( อัปเดต: MuPDF เวอร์ชันที่ใหม่กว่าได้ย้ายฟังก์ชันการทำงานเดิมของ'pdfextract'ไปเป็นคำสั่ง'สารสกัด mutool'ดาวน์โหลดได้ที่นี่: mupdf.com/downloads )
หมายเหตุ: pdfextract.exe
เป็นโปรแกรมบรรทัดคำสั่ง หากต้องการใช้ให้ทำดังต่อไปนี้:
c:\> pdfextract.exe c:\path\to\filename.pdf # (on Windows)
$> pdfextract /path/tofilename.pdf # (on Linux, Unix, Mac OS X)
คำสั่งนี้จะดัมพ์ไฟล์ที่แยกได้ทั้งหมดจากไฟล์ pdf ที่อ้างอิงไปยังไดเรกทอรีปัจจุบัน โดยทั่วไปแล้วคุณจะเห็นไฟล์ที่หลากหลาย: รูปภาพและแบบอักษร เหล่านี้รวมถึง PNG, TTF, CFF, CID และอื่น ๆ ชื่อภาพจะเป็นเหมือนimg-0412.pngหากหมายเลขออบเจ็กต์ PDF ของภาพเท่ากับ 412 ชื่อตัวอักษรจะเป็นเช่นFGETYK + LinLibertineI-0966.ttfหากตัวอักษรของ หมายเลขวัตถุ PDF คือ 966
ไฟล์ CFF ( รูปแบบอักษรขนาดกะทัดรัด ) เป็นรูปแบบที่เป็นที่รู้จักซึ่งสามารถแปลงเป็นรูปแบบอื่นผ่านตัวแปลงที่หลากหลายเพื่อใช้ในระบบปฏิบัติการที่แตกต่างกัน
อีกครั้ง: โปรดทราบว่าไฟล์ฟอนต์เหล่านี้ส่วนใหญ่อาจมีเพียงชุดย่อยของอักขระและอาจไม่แสดงแบบอักษรทั้งหมด
อัปเดต: (ก.ค. 2556) เวอร์ชันล่าสุดmupdf
เห็นการปรับเปลี่ยนภายในและเปลี่ยนชื่อไบนารีไม่เพียงครั้งเดียว แต่หลายครั้ง ยูทิลิตี้หลักที่ใช้จะเป็น 'ไบนารี knife' เหมือนกันเรียกว่าสวิสmubusy
(ชื่อแรงบันดาลใจจาก busybox?) ซึ่งเมื่อเร็ว ๆ mutool
นี้ได้รับการเปลี่ยนชื่อเป็น การสนับสนุนเหล่านี้ย่อยคำสั่งinfo
, clean
, extract
, และposter
show
โชคไม่ดีที่เอกสารทางการของเครื่องมือเหล่านี้ยังไม่เป็นปัจจุบัน (ยัง) หากคุณบน Mac โดยใช้ 'MacPorts' แล้วยูทิลิตี้ถูกเปลี่ยนชื่อเพื่อที่จะหลีกเลี่ยงการปะทะกันชื่อกับสาธารณูปโภคอื่น ๆ mupdfextract
โดยใช้ชื่อเหมือนกันและคุณอาจจำเป็นต้องใช้
เพื่อให้ได้ผลลัพธ์ที่เทียบเท่า (คร่าวๆ) mutool
เหมือนที่เคยpdfextract
ทำกับเครื่องมือก่อนหน้านี้ให้เรียกใช้mubusy extract ...
*
ดังนั้นหากต้องการแยกแบบอักษรและรูปภาพคุณอาจต้องเรียกใช้หนึ่งใน commandline ต่อไปนี้:
c:\> mutool.exe extract filename.pdf # (on Windows)
$> mutool extract filename.pdf # (on Linux, Unix, Mac OS X)
ดาวน์โหลดอยู่ที่นี่: mupdf.com/downloads
การใช้gs
(Ghostscript)
จากนั้นGhostscriptยังสามารถแยกแบบอักษรได้โดยตรงจาก PDF แต่ก็ต้องการความช่วยเหลือของโปรแกรมพิเศษยูทิลิตี้ชื่อextractFonts.ps
ที่เขียนในภาษา PostScript ซึ่งสามารถใช้ได้จากพื้นที่เก็บข้อมูล Ghostscript รหัสแหล่งที่มา
ตอนนี้ใช้คุณจะต้องเรียกใช้ทั้งไฟล์นี้extractFonts.ps
และไฟล์ PDF ของคุณ Ghostscript จะใช้คำแนะนำจากโปรแกรม PostScript เพื่อแยกแบบอักษรจาก PDF ดูเหมือนว่าใน Windows (ใช่ Ghostscript เข้าใจ 'forward slash', /, เป็นตัวคั่นพา ธ บน Windows!):
gswin32c.exe ^
-q -dNODISPLAY ^
c:/path/to/extractFonts.ps ^
-c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"
หรือบน Linux, Unix หรือ Mac OS X:
gs \
-q -dNODISPLAY \
/path/to/extractFonts.ps \
-c "(/path/to/your/PDFFile.pdf) extractFonts quit"
ฉันได้ทดสอบวิธี Ghostscript เมื่อไม่กี่ปีที่ผ่านมา ในเวลานั้นมันแตก * .ttf (TrueType) ได้ดี ฉันไม่รู้ว่าตัวอักษรประเภทอื่น ๆ จะถูกดึงออกมาด้วยหรือไม่และถ้าเป็นเช่นนั้นจะสามารถใช้งานได้อีกครั้ง ฉันไม่ทราบว่ายูทิลิตี้บล็อกการแยกแบบอักษรที่ถูกทำเครื่องหมายว่าได้รับการป้องกันหรือไม่
การใช้ pdf-parser.py
ท้ายที่สุดไฟล์ pdf-parser.pyของ Didier Stevens : อันนี้อาจไม่ง่ายต่อการใช้งานเพราะคุณจำเป็นต้องมีความรู้เกี่ยวกับโครงสร้าง PDF ภายใน pdf-parser.py
เป็นสคริปต์ Python ซึ่งสามารถทำสิ่งอื่น ๆ ได้มากมายเช่นกัน นอกจากนี้ยังสามารถขยายและแยกกระแสข้อมูลแบบสุ่มจากวัตถุดังนั้นจึงสามารถแยกไฟล์แบบอักษรที่ฝังได้ด้วย
แต่คุณต้องรู้ว่าต้องหาอะไร ลองดูด้วยตัวอย่าง ผมมีไฟล์ชื่อbig.pdf ในขั้นตอนแรกฉันใช้-s
พารามิเตอร์เพื่อค้นหา PDF สำหรับการเกิดขึ้นของคำสำคัญใด ๆFontFile ( pdf-parser.py
ไม่จำเป็นต้องค้นหาด้วยตัวพิมพ์เล็กและตัวพิมพ์ใหญ่):
pdf-parser.py -s fontfile big.pdf
ในกรณีของฉันสำหรับbig1.pdfของฉันฉันได้รับผลลัพธ์นี้:
obj 9 0
Type: /FontDescriptor
Referencing: 15 0 R
<<
/Ascent 728
/CapHeight 716
/Descent -210
/Flags 32
/FontBBox [ -665 -325 2000 1006 ]
/FontFile2 15 0 R
/FontName /ArialMT
/ItalicAngle 0
/StemV 87
/Type /FontDescriptor
/XHeight 519
>>
obj 11 0
Type: /FontDescriptor
Referencing: 16 0 R
<<
/Ascent 728
/CapHeight 716
/Descent -210
/Flags 262176
/FontBBox [ -628 -376 2000 1018 ]
/FontFile2 16 0 R
/FontName /Arial-BoldMT
/ItalicAngle 0
/StemV 165
/Type /FontDescriptor
/XHeight 519
>>
มันบอกฉันว่ามีสองอินสแตนซ์ของFontFile2
ภายใน PDF และสิ่งเหล่านี้อยู่ในออบเจ็กต์ PDF 15 และไม่ 16 ตามลำดับ หมายเลขวัตถุ 15 ถือ/FontFile2
สำหรับฟอนต์/ ArialMT , หมายเลขอ็อบเจ็กต์ 16 ถือ/FontFile2
สำหรับตัวอักษร/ Arial-BoldMT
หากต้องการแสดงสิ่งนี้ให้ชัดเจนยิ่งขึ้น:
pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
การดูข้อมูลจำเพาะ PDF อย่างรวดเร็วเผยให้เห็นคำสำคัญที่/FontFile2
เกี่ยวข้องกับ 'สตรีมที่มีโปรแกรมแบบอักษร TrueType' ( /FontFile
จะเกี่ยวข้องกับ'สตรีมที่มีโปรแกรมแบบอักษร Type 1'และ/FontFile3
เกี่ยวข้องกับ'สตรีมที่มีโปรแกรมฟอนต์ที่มีรูปแบบคือ ที่ระบุโดยรายการย่อยในพจนานุกรมสตรีม ' {จึงเป็นType1CหรือCIDFontType0Cชนิดย่อย})
วิธีดูหมายเลข PDF ของวัตถุโดยเฉพาะ 15 (ซึ่งเก็บฟอนต์/ ArialMT ) หนึ่งสามารถใช้-o 15
พารามิเตอร์:
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
pdf-parser.py
เอาท์พุทนี้บอกเราว่าวัตถุนี้มีกระแส (ซึ่งจะไม่แสดงโดยตรง) ที่มีความยาว 1.581.435 ไบต์และถูกเข้ารหัส (== "บีบอัด") ด้วย ASCIIHexEncode และจำเป็นต้องถอดรหัส (== "de- บีบอัด "หรือ" กรอง ") ด้วยความช่วยเหลือของ/ASCIIHexDecode
ตัวกรองมาตรฐาน
หากต้องการดัมพ์สตรีมใด ๆ จากวัตถุpdf-parser.py
สามารถเรียกด้วย-d dumpname
พารามิเตอร์ มาทำกัน:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
การถ่ายโอนข้อมูลของเราสกัดจะอยู่ในไฟล์ที่ชื่อว่าทิ้ง-data.ext มาดูกันว่ามันใหญ่แค่ไหน:
ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
โอ้มันเป็น 1.581.435 ไบต์ เราเห็นรูปนี้ในผลลัพธ์ของคำสั่งก่อนหน้า การเปิดไฟล์นี้ด้วยโปรแกรมแก้ไขข้อความยืนยันว่าเนื้อหาเป็นข้อมูลที่เข้ารหัสด้วย ASCII hex
การเปิดไฟล์ด้วยเครื่องมืออ่านฟอนต์otfinfo
(นี่เป็นส่วนหนึ่งของlcdf-typetools
แพ็คเกจ ) จะทำให้เกิดความผิดหวังในตอนแรก:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
ตกลงนี่เป็นเพราะเรายังไม่ได้pdf-parser.py
ใช้ประโยชน์จากเวทมนตร์เต็มรูปแบบในการทิ้งสตรีมที่ถูกกรองและถอดรหัสแล้ว สำหรับสิ่งนี้เราต้องเพิ่ม-f
พารามิเตอร์:
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
ไฟล์ใหม่นี้มีขนาดเท่าไหร่?
ls -l dumped-data-decoded.ext
-rw-r--r-- 1 kurtpfeifle staff 778552 Apr 11 00:39 dumped-data-decoded.ext
โอ้ดู: หมายเลขที่แน่นอนนั้นถูกเก็บไว้ในออบเจ็กต์ PDF แล้ว 15 พจนานุกรมเป็นค่าสำหรับคีย์/Length1
...
สิ่งที่ไม่file
คิดว่ามันคืออะไร?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
อะไรotfinfo
บอกเราเกี่ยวกับมัน
otfinfo -i dumped-data-decoded.ext
Family: Arial
Subfamily: Regular
Full name: Arial
PostScript name: ArialMT
Version: Version 5.10
Unique ID: Monotype:Arial Regular:Version 5.10 (Microsoft)
Designer: Monotype Type Drawing Office - Robin Nicholas, Patricia Saunders 1982
Manufacturer: The Monotype Corporation
Trademark: Arial is a trademark of The Monotype Corporation.
Copyright: © 2011 The Monotype Corporation. All Rights Reserved.
License Description: You may use this font to display and print content as permitted by
the license terms for the product in which this font is included.
You may only (i) embed this font in content as permitted by the
embedding restrictions included in this font; and (ii) temporarily
download this font to a printer or other output device to help
print content.
Vendor ID: TMC
ดังนั้น Bingo! เรามีผู้ชนะ: pdf-parser.py
ได้แยกไฟล์ฟอนต์ที่ถูกต้องสำหรับเราแล้ว ด้วยขนาดของไฟล์นี้ (778.552 ไบต์) ดูเหมือนว่าตัวอักษรนี้จะถูกฝังลงใน PDF อย่างสมบูรณ์ ...
เราสามารถเปลี่ยนชื่อเป็นarial-regular.ttfและติดตั้งมันและใช้มันอย่างมีความสุข
คำเตือน:
ไม่ว่าในกรณีใดคุณต้องปฏิบัติตามใบอนุญาตที่ใช้กับแบบอักษร ใบอนุญาตแบบอักษรบางตัวไม่อนุญาตให้ใช้งานฟรีและ / หรือแจกจ่าย แบบอักษรละเมิดลิขสิทธิ์เปรียบเสมือนการละเมิดลิขสิทธิ์ซอฟต์แวร์หรือเนื้อหาที่มีลิขสิทธิ์อื่น ๆ
PDF ส่วนใหญ่ที่อยู่ใน wild นั้นไม่ได้ฝังฟอนต์แบบเต็มอยู่แล้ว แต่เป็นชุดย่อยเท่านั้น การแยกชุดย่อยของแบบอักษรจะมีประโยชน์ในขอบเขตที่ จำกัด มากเท่านั้น
โปรดอ่านต่อไปนี้เกี่ยวกับข้อดีและข้อเสียเพิ่มเติม (เพิ่มเติม) เกี่ยวกับความพยายามในการแยกแบบอักษร: