23

Có cách nào dễ dàng (có thể viết) để chuyển đổi PDF với hình ảnh vectơ thành PDF với hình ảnh raster không? Nói cách khác, tôi muốn tạo một tệp PDF với văn bản chính xác (không rasterized) nhưng với mỗi hình ảnh vector được thay thế bằng một phiên bản được rasterized.Thay thế hình ảnh vector trong PDF bằng hình ảnh raster

Tôi thỉnh thoảng đọc các tệp PDF về các bài viết kỹ thuật trên Kindle của mình và nhận thấy rằng việc đọc PDF trực tiếp là bực bội. Rất may, số automatic conversion của Amazon đối với định dạng Kindle thực hiện tốt công việc chỉnh sửa phần văn bản của hầu hết các tệp PDF mà tôi đã thử. Tuy nhiên, trong khi hình ảnh raster dường như làm cho nó thông qua quá trình chuyển đổi tốt, hình ảnh vector bị xén xệch khủng khiếp. Nó sẽ là tuyệt vời nếu tôi có thể dễ dàng chuyển đổi một PDF để tất cả các hình ảnh vector của nó đã được rasterized.

Tôi quan tâm đến mọi giải pháp có thể, nhưng một giải pháp dựa trên Linux hoặc Windows sẽ thích hợp hơn.

+0

Lưu ý: Câu hỏi này ban đầu [gửi] (http: // tex.stackexchange.com/questions/47076/replacing-vector-images-in-a-pdf-with-raster-images) tại [trang TeX] (http://tex.stackexchange.com/), nhưng các mod có đề nghị tôi hỏi nó ở đây để thay thế. –

+0

Bạn có thể xuất tất cả các trang sang hình ảnh và sau đó tạo tệp PDF bằng các hình ảnh đó. Có rất nhiều ứng dụng có thể thực hiện việc này. Tôi nghĩ rằng một sự kết hợp của imagemagick và/hoặc ghostscript sẽ làm. Đối với các lập trình viên, tôi đã viết một bài báo có tiêu đề "How To Rasterize A PDF Document In .NET", cho thấy cách thực hiện điều này bằng cách sử dụng sản phẩm PDFOne .NET của chúng tôi. – BZ1

+1

Nhưng tôi chỉ muốn rasterize hình ảnh/số liệu trong PDF, không phải là văn bản. Tôi không thấy bất kỳ cách nào để làm điều này bằng cách sử dụng ImageMagick. Tôi sẽ xem Ghostscript. –

Trả lời

2

Hơi phức tạp một chút, nhưng bạn đã yêu cầu giải pháp có thể. Hơn nữa giải pháp này không phải là tự động.

1) Mở pdf với hình ảnh vector trong Inkscape. Sau đó chọn toàn bộ hình ảnh với các công cụ select (F1)

2) Nếu hình ảnh vector là nhất quán hơn một svg đồ họa báo chí Ctrl + G (Object -> Nhóm)

3) cắt hình ảnh svg nhóm Ctrl + x

4) mở một Inkscape Window Ctrl + n mới và dán hình ảnh Ctrl + v

5) chọn file -> Bitmap xuất khẩu (Shift + Ctrl + e), có thể bạn muốn tăng dpi

6) quay trở lại cửa sổ Inkscape đầu tiên, File -> nhập khẩu (Ctrl + i) và chọn bitmap xuất khẩu trước đây

7) đặt bitmap đến vị trí hình ảnh svg là

Lưu pdf và hình ảnh vector được thay thế bằng một hình ảnh bitmap.

+0

Rất phức tạp và làm việc chuyên sâu.Tôi đang tìm kiếm một phiên bản tự động hơn và nghĩ rằng một tập lệnh như vậy nên tồn tại ở đâu đó. – data

+0

Có, tôi nghĩ rằng bạn cần một cách có thể viết được. Nhưng tôi nghĩ sau 11 tháng mà không có một câu trả lời duy nhất, tôi chia sẻ một cách có thể, ít nhất. –

1

Dưới đây là một cách để giải quyết vấn đề của bạn:

Bước 1: Sử dụng một trực tuyến PDF-to-HTML chuyển đổi, giống như ai ở đây:

http://www.idrsolutions.com/online-pdf-to-html5-converter/

Công cụ này chuyển đổi PDF thành một tập hợp các hình ảnh và lớp phủ văn bản. Các hình ảnh vector nên được chuyển đổi thành raster tại thời điểm này.

Bước 2: Chuyển đổi HTML + hình ảnh trở lại vào PDF:

http://pdfcrowd.com/#convert_by_upload+with_options

Kết quả là PDF sẽ có tất cả những hình ảnh vector rasterized, và tất cả các văn bản sẽ vẫn văn bản, vì vậy bạn có thể lựa chọn, sao chép, v.v.

+0

Vấn đề đối với tôi là đối với nhiều tệp pdf, pdf2html không thể phân tích cú pháp pdf đúng cách, do đó làm cho điều này không hiệu quả. – data

+0

Một vấn đề khác là văn bản _within_ con số nên được rasterized cùng với phần còn lại của các con số; ví dụ, hãy nghĩ về các nhãn trên các trục của biểu đồ. Giải pháp này (pdf2html) để lại văn bản đó dưới dạng văn bản, vì vậy con số rasterized kết quả là không đầy đủ. –

+0

Ngoài ra, không rõ làm thế nào bạn sẽ sử dụng điều này cho một PDF với nhiều hơn một trang. –

8

Tôi gặp sự cố tương tự và giải quyết vấn đề bằng công cụ chuyển đổi ImageMagics (http://www.imagemagick.org/script/index.php).Mà đi kèm với Linux và chạy tốt trên Windows/Cygwin hay OS X

convert -density 300 largeVectorFileFromR.pdf out.pdf

Với -density 300 bạn giải quyết điều khiển (như DPI).

Nhược điểm: Văn bản được rasterized là tốt, tôi hiểu rằng Michael không muốn điều này.

+0

Người dùng gặp phải lỗi "không có hình ảnh được xác định" sẽ cần phải cài đặt phụ thuộc vào ma chữ 'gs' phụ thuộc. Đối với người dùng MacOS với Homebrew: 'brew install ghostscript' –

2

Cập nhật Pitstop Pro v2 3 từ Enfocus có thể thực hiện chính xác điều đó. Nó có một hành động gọi là "Rasterize nội dung trang, giữ văn bản" mà hoạt động khá tốt. Nó là một plugin cho Adobe Acrobat vì vậy nó đòi hỏi nhiều hơn một chút nhưng cũng có sẵn như là một giải pháp máy chủ.

+2

Chào mừng bạn đến với stackoverflow. Trên bài viết có thể trả lời câu hỏi.Nhưng ít lời giải thích hơn có thể giúp các lập trình viên đồng để hiểu nó hoạt động như thế nào. – Daenarys

0

tôi sử dụng như sau:

gswin32c -o "%2" -dFirstPage=1 -dLastPage=1 -sDEVICE=pngalpha -r72x72 -dUseCropBox -dFitPage "%1" -dBATCH -dNOPAUSE 

nơi %1 là file đầu vào và %2 là đầu ra. Điều này có thể được sử dụng với LaTeX, PNG được tạo ra có cùng tỷ lệ và kích thước trang như PDF gốc nên vị trí tương đối của hình ảnh sẽ không thay đổi.

Lưu ý rằng trong Linux, bạn có thể cần sử dụng gs thay vì gswin32c.

Bạn cũng có thể đặt phạm vi trang và sau đó in các trang trở lại PDF. Nhược điểm là văn bản được rasterized là tốt.

0

Chuyển đổi pdf sang djvu bằng công cụ chuyển đổi https://jwilk.net/software/pdf2djvu. Bỏ chọn "phông chữ antialias, vectơ ..". Nó sẽ làm giảm kích thước tập tin đáng kể và cải thiện thời gian tải tài liệu.

0

Sau vài ngày tìm kiếm một số giải pháp, dựa trên "Remove all text from PDF file" và "How to add a picture onto an existing pdf file?" Tôi tìm thấy một (xấu xí) giải pháp kịch bản:

gs -o /tmp/onlytxt.pdf -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERIMAGE $INPUT_FILE && \ 
gs -o /tmp/graphics.pdf -sDEVICE=pdfwrite -dFILTERTEXT $INPUT_FILE && \ 
convert -density $DPI -quality 100 /tmp/graphics.pdf /tmp/graphics.png && \ 
convert -density $DPI -quality 100 /tmp/graphics.png /tmp/graphics.pdf && \ 
pdftk /tmp/graphics.pdf stamp /tmp/onlytxt.pdf output $OUTPUT_FILE && \ 
rm /tmp/onlytxt.pdf /tmp/graphics.pdf /tmp/graphics.png 

là chúng tôi có ba biến input_file, output_file, và DPI. Chúng tôi chia nội dung văn bản và đồ họa thông qua Ghostscript, chuyển đổi hình ảnh đồ họa thành hình ảnh raster (PNG) và tham gia cả hai bằng cách sử dụng pdftk.

Tôi đã sử dụng thành công này để chuyển đổi các hình ảnh vector lớn để sử dụng trong các bài báo khoa học.

0

inkscape là giải pháp tốt nhất, tôi đã nhanh chóng tạo tệp hàng loạt thay vì chưa được tối ưu hóa này thực hiện chính xác điều đó và bạn có thể chơi với nó và thay đổi tùy chọn. ImageMacick chuyển đổi, gs, hoặc pdftoimages không làm việc tốt như inkscape họ hoặc là không xuất khẩu các lớp hoặc xuất khẩu nhưng với chất lượng xấu:

#!/bin/bash 
#set -xev 
ORIGINAL_FOLDER=`pwd` 
JPEGS=`mktemp -d` 
unzip "$1" -d "$JPEGS" 
cd "$JPEGS" 
# expang the pdf in pdf pages 
pdftk combined_to_do.pdf burst output pg_%04d.pdf 
#1) print the pdf's to pngs as they are seen with alpha, layers, transparency etc, this cannot be done by ImageMacick convert or pdftoimages 
ls ./pg*.pdf | xargs -L1 -I {} inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png 
#2) Second change to jpgs 
rm *.pdf 
ls ./p*.png | xargs -L1 -I {} convert {} -quality 100 -density 300 {}.jpg 
#3) This to make a pdf file out of every jpg image without loss of either resolution or quality: 
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf 
#4) This to concatenate the pdfpages into one: 
pdftk *.jpg.pdf cat output combined.pdf 
#5) And last I add an OCRed text layer that doesn't change the quality of the scan in the pdfs so they can be searchable: 
pypdfocr combined.pdf 
cp "$JPEGS/combined_ocr.pdf" "$ORIGINAL_FOLDER/$1_ocr.pdf" 
cp "$JPEGS/combined.pdf" "$ORIGINAL_FOLDER/$1.pdf" 
Các vấn đề liên quan