2012-02-02 81 views
6

Tôi có một tệp PDF có thể tìm kiếm được và tôi cần chuyển đổi PDF thành một tệp không thể tìm kiếm được.Chuyển đổi PDF có thể tìm kiếm sang PDF không thể tìm kiếm được

Tôi đã thử sử dụng Ghostscript và thay đổi nó thành JPEG và sau đó quay lại PDF mà không phải là thủ thuật nhưng kích thước tập tin là quá lớn và không thể chấp nhận được.

Tôi đã thử sử dụng Ghostscript để chuyển đổi PDF sang PS trước và sau đó là PDF thực hiện thủ thuật nhưng chất lượng không đủ tốt.

gswin32.exe -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pswrite -r1000 -sOutputFile=out.ps in.pdf 
gswin32.exe -q -dNOPAUSE -dBATCH -dSAFER -dDEVICEWIDTHPOINTS=596 -dDEVICEHEIGHTPOINTS=834 -dPDFSETTINGS=/ebook -sDEVICE=pdfwrite -sOutputFile=out.pdf out.ps 

Có cách nào để mang lại chất lượng tốt cho tệp PDF không?

Ngoài ra, có cách nào dễ dàng hơn để chuyển đổi PDF có thể tìm kiếm thành một tệp không thể tìm kiếm được không?

Trả lời

11

Bạn có thể sử dụng Ghostscript để đạt được điều đó.Bạn cần 2 bước:

  1. Chuyển đổi PDF thành tệp PostScript, tất cả đều sử dụng phông chữ được chuyển đổi thành hình dạng đường viền. Chìa khóa ở đây là -dNOCACHE paramenter:

     
    gs -o somepdf.ps -dNOCACHE -sDEVICE=pswrite somepdf.pdf

  2. Chuyển đổi PS lại sang PDF (và, có lẽ xóa PS trung gian một lần nữa):

     
    gs -o somepdf-with-outlines.pdf -sDEVICE=pdfwrite somepdf.ps 
    rm somepdf.ps

Note, mà kết quả PDF rất có thể sẽ lớn hơn so với bản gốc. (Và, nếu không có tham số dòng lệnh bổ sung, tất cả hình ảnh trong PDF gốc cũng có thể được chuyển đổi theo mặc định của Ghostscript, trừ khi bạn thêm các tham số dòng lệnh khác để thực hiện khác. Nhưng chất lượng phải tốt hơn nỗ lực của bạn để sử dụng Ghostscript ...)


cập nhật

Rõ ràng, từ phiên bản 9.15 (sẽ được phát hành trong tháng Chín/tháng 10 năm 2014), Ghostscript sẽ hỗ trợ một mới tham số dòng lệnh:

-dNoOutputFonts 

mà sẽ làm cho các thiết bị đầu ra pdfwrite, ps2writeeps2write"để 'san bằng' glyphs vào hoạt động 'cơ bản' đánh dấu (chứ không phải viết phông chữ để đầu ra)".

Điều này có nghĩa rằng hai bước trên có thể tránh được, và kết quả mong muốn thể đạt được với một lệnh duy nhất:

gs -o somepdf-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite somepdf.pdf 

Hãy cẩn thận: Tôi đã thử nghiệm điều này với một vài tập tin đầu vào sử dụng một Ghostscript tự biên soạn dựa trên các nguồn Git hiện tại. Nó hoạt động hoàn hảo trong mỗi trường hợp.

+0

theo ý kiến ​​khiêm tốn của tôi, tôi khuyên bạn nên chuyển đổi đầu tiên trong postscript: 'gs -dBATCH -dNOPAUSE -dNOCACHE -dSAFER -sDEVICE = pswrite -sOutputFile = output.ps input.pdf' và sau đó để vượt qua postscript kết quả này * ps2pdf *. Nếu trang của bạn có các trang tùy chỉnh (ví dụ: 17x24 cm), bạn cần phải chuyển * -g * sang * ps2pdf *, ví dụ: đối với trang 17x24 cm: 'ps2pdf -g4820x6800 input.ps output.pdf'; nói cách khác, hãy xem các trang theo điểm (với pdfinfo), sau đó nhân cả hai chiều với 10 – Dingo

+2

@Dingo: Nếu bạn sử dụng phiên bản GS gần đây, '-o out.ps' giống với' -dBATCH - dNOPAUSE -sOutputFile = out.ps'. Ngoài ra, phiên bản GS gần đây không đặt kích thước trang của tệp đầu ra (PostScript) tự động giống như tệp (PDF) của tệp đầu vào. Nếu bạn muốn ở bên an toàn, bạn có thể đặt thêm nó bằng '-gNNNxMMM' mà không gặp vấn đề gì. Tôi không thích 'ps2pdf' cho hầu hết các trường hợp, bởi vì nó là một wrapper xung quanh một commandline Ghostscript anyway .... - Vì vậy, những gì còn lại như là một sự khác biệt giữa các khuyến nghị mới nhất của bạn và của tôi? –

+0

bạn đã đúng. Tôi chưa đọc kỹ trước đây. Xin lỗi và cảm ơn những lời khuyên tuyệt vời! – Dingo

3

một cách có thể để tạo ra không thể tìm kiếm pdf vector từ pdf vector tìm kiếm là

  1. nổ pdf trong các trang đơn lẻ của nó

    pdftk file.pdf burst

  2. chuyển đổi bất kỳ trang duy nhất trong svg với

    pdftocairo

chứa thành poppler utils

for f in *.pdf; do pdftocairo -svg $f; done 

3. xóa TẤT CẢ pdf trong thư mục

4. sau đó, với batikrasterizer

tái chuyển đổi ALL svg để pdf (thời gian này các file PDF kết quả sẽ được giữ vectơ, nhưng mà không phải tìm kiếm)

java -jar ./batik-rasterizer.jar -m application/pdf *.svg 

bước cuối cùng: tham gia tất cả các kết quả pd trang duy nhất trong một tập tin pdf nhiều trang

pdftk *.pdf cat output out.pdf 
+0

một [công cụ thay thế] (http://manpages.ubuntu.com/manpages/xenial/man1/rasterizer.1.html) cho bước 4 có thể được sử dụng với lệnh sau: '$ cho f trong * .svg ; làm rasterizer -m application/pdf $ f; done'. PS: Tôi không hoàn toàn chắc chắn làm thế nào hai công cụ này có liên quan hoặc chồng lên nhau, mặc dù ... –

+0

mở rộng phạm vi của câu hỏi ban đầu, đây sẽ là một cách để cắt các tập tin kết quả: http://tex.stackexchange.com/ a/42259/27721 –

0

Tôi nghĩ rằng chuyển đổi sang một hình ảnh như jpg là con đường để đi, nó có thể là giá trị chuyển đổi cho là hình ảnh, tối ưu hóa/giảm kích thước của hình ảnh và sau đó tạo ra một PDF với những người?

Các vấn đề liên quan