سؤال

أحاول تحويل PDF إلى صورة PNG (على الأقل غلاف واحد).انا بنجاح استخراج الصفحة الأولى من PDF مع pdftk.أنا باستخدام يماغيماغيك للقيام التحويل:

convert cover.pdf cover.png

يعمل هذا, ولكن للأسف الغطاء.png يأتي من خلال المقدمة بشكل غير صحيح (بعض ألفا الكائن في PDF ليسوا المقدمة بشكل صحيح).أنا أعرف يماغيماغيك يستخدم غوستسكريبت للقيام التحويل و إذا لم تفعل ذلك مباشرة مع gs يمكنني الحصول على النتائج المرجوة, ولكن أنا أفضل أن استخدام تحويل المكتبة كما أن لديها أدوات أخرى أود أن النفوذ.

هذا الأمر في غوستسكريبت يحقق الصورة المطلوبة:

gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf

أنا أتساءل هل هناك أي طريقة تمرير الوسائط من خلال تحويل إلى GhostScript أو أنا عالقة مع الدعوة غوستسكريبت مباشرة ؟

هل كانت مفيدة؟

المحلول

يمكنك استخدام واحدة فلكس مع اثنين من الأوامر (gs, convert) متصلا من خلال الأنابيب ، إذا كان أول الأمر أن الكتابة الإنتاج المعياري و لو ثانية واحدة يمكن قراءة المدخلات من stdin.

  1. لحسن الحظ, gs يمكن الكتابة إلى المعياري (... -o %stdout ...).
  2. لحسن الحظ, تحويل القراءة من stdin (convert -background transparent - output.png).

حل المشكلة:

  • ع استخدام قناة ألفا معالجة خاصة الصورة ،
  • تحويل تستخدم لخلق خلفية شفافة ،
  • الأنابيب المستخدمة لتجنب كتابة ملف مؤقت على القرص.

الحل الكامل:

gs -sDEVICE=pngalpha       \
   -o %stdout              \
   -r144 cover.pdf         \
   |                       \
convert                    \
   -background transparent \
   -                       \
    cover.png

التحديث

إذا كنت تريد أن يكون منفصل PNG في صفحة PDF, يمكنك استخدام %d بناء الجملة:

gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf

هذا سوف إنشاء ملفات PNG اسمه page-000.png, page-001.png, ...(لاحظ أن %d-عد يستند -- file-000.png يتوافق مع صفحة 1 من PDF ، 001 الصفحة 2...

أو إذا كنت تريد أن تبقى الخاص بك خلفية شفافة ، 100 صفحة PDF, هل

for i in {1..100}; do        \
                             \
  gs -sDEVICE=pngalpha       \
     -dFirstPage="${i}"      \
     -dLastPage="${i}"       \
     -o %stdout              \
     -r144 input.pdf         \
     |                       \
  convert                    \
     -background transparent \
     -                       \
      page-${i}.png ;        \
                             \
done

نصائح أخرى

من بين جميع البدائل المتاحة وجدت إنكسكيب لإنتاج أدق النتائج عند تحويل ملفات PDF إلى PNG. وخصوصا عندما كان الملف المصدر طبقات شفافة، نجح حيث فشل إنكسكيب يماغيماغيك وغيرها من الأدوات.

وهذا هو الأمر الذي استعملته:

inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"

وهنا تم تنفيذه في البرنامج النصي:

#!/bin/bash

while [ $# -gt 0 ]; do

pdf=$1
echo "Converting "$pdf" ..."
pngfile=`echo "$pdf" | sed 's/\.\w*$/.png/'`
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
echo "Converted to "$pngfile""
shift

done

echo "All jobs done. Exiting."

تحويل pdf إلى ملفات الصور استخدام الأوامر التالية:

بالنسبة PNG gs -sDEVICE=png16m -dTextAlphaBits=4 -r300 -o a.png a.pdf

بالنسبة JPG gs -sDEVICE=jpeg -dTextAlphaBits=4 -r300 -o a.jpg a.pdf

إذا كان لديك عدة صفحات إضافة إلى اسم %03d gs -o a%03d.jpg a.pdf

ما كل خيار يعني:

  • sDEVICE={jpeg ، pngalpha,png16m...} - نوع الملف
  • -س - الملف الناتج (%المعياري إلى stdout)
  • -dTextAlphaBits=4 - الخط الحواف.
  • -r300 - 300 نقطة في البوصة

ويمكن للمرء أيضا استخدام الأمر خط المرافق المدرجة في حزمة poppler-utils:

sudo apt-get install poppler-utils
pdftoppm --help
pdftocairo --help

مثال:

pdftocairo -png mypage.pdf mypage.png

لم أستطع الحصول على قبول الجواب على العمل.ثم اكتشفت أنه فعلا الحل هو أبسط من ذلك بكثير على أي حال كما غوستسكريبت ليس فقط يدعم أصلا PNG ولكن حتى متعددة مختلفة "ترميزات":

  • png256
  • png16
  • pnggray
  • pngmono
  • ...

الأمر shell الذي يعمل بالنسبة لي هو:

gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf

فإنه سيتم حفظ الصفحة 2 من الاختبار.pdf اختبار.png باستخدام pnggray ترميز و 500 نقطة في البوصة.

وهنا هو مناقشة الألمانية حول مشكلة مثل هذا لملفات SVG حيث يتم حلها باستخدام

convert -background transparent

ولعل هذا يعمل لك أيضا.

وسأضيف حل بي، حتى يعتقد موضوع له قديمة. ربما هذا سوف يساعد شخص ما على أي حال.

أولا، ولست بحاجة لتوليد PDF. يمكنني استخدام XeLaTeX للحصول على ما يلي:

xelatex test.tex

والآن، يماغيماغيك و <لأ href = "HTTP: //www.graphicsmagick كافيه / "يختلط =" نوفولو "> GraphicMagic كلا تحليل المعلمات من اليسار إلى اليمين، وبالتالي فإن أقصى اليسار المعلمة، وسيتم تنفيذ أول. انتهى بي الأمر باستخدام هذا التسلسل للتجهيز الأمثل:

gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png

وانه يعطي رسومات جميلة على خلفية شفافة، وقلص إلى ما هو في الواقع على الصفحة. المعلمات -density و-resize، وإعطاء تحبب أفضل، وزيادة حل شامل.

وأقترح فحص ما إذا كان يمكن تقل الكثافة بالنسبة لك. انها سوف تخفض تحويل الوقت.

لقوات الدفاع الشعبي التي يماغيماغيك كان يعطي الألوان غير دقيقة وجدت أن GraphicsMagick قام بعمل أفضل:

$ gm convert -quality 100 -thumbnail x300 -flatten journal.pdf\[0\] cover.jpg

وبلدي الحل هو أبسط من ذلك بكثير وأكثر مباشرة. على الأقل كان يعمل بهذه الطريقة على جهاز الكمبيوتر (مع المواصفات التالية):

me@home: my.folder$ uname -a
Linux home 3.2.0-54-generic-pae #82-Ubuntu SMP Tue Sep 10 20:29:22 UTC 2013 i686 i686 i386 GNU/Linux

مع

me@home: my.folder$ convert --version
Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP

وهكذا، وهنا ما أركض على بلدي file.pdf:

me@home: my.folder$ convert -density 300 -quality 100 file.pdf file.png

هذه الصفحة أيضا قوائم الأدوات البديلة سوف أذكر xpdf الذي سطر الأوامر أدوات جاهزة جمعت لينكس/ويندوز/ماك.يدعم الشفافية.هو مجاني للاستخدام التجاري - مقابل غوستسكريبت التي حقا الفاحشة التسعير.

في اختبار على مجموعة ضخمة من ملف PDF كان 7.5 ٪ أسرع من غوستسكريبت.

(كما أن لديها PDF إلى نص HTML المحولات)

وحاول استخراج صفحة واحدة.

الصفحة $ = 4

gs -sDEVICE=pngalpha -dFirstPage="$page" -dLastPage="$page" -o thumb.png -r144 input.pdf

ويمكنك استخدام يماغيماغيك دون فصل في الصفحة الأولى من PDF مع غيرها من الأدوات. فقط تفعل

convert -density 288 cover.pdf[0] -resize 25% cover.png

و
هنا يمكنني زيادة كثافة الاسمية بنسبة 400٪ (72 * 4 = 288) ثم تغيير من قبل 1/4 (25٪). وهذا يعطي جودة أفضل بكثير لبابوا غينيا الجديدة الناتجة عن ذلك.

ولكن، إذا كان PDF هو CMYK، PNG لا يدعم ذلك. وستحتاج إلى أن يتم تحويلها إلى sRGB، وخاصة إذا كان لديه شفافية، منذ غوستسكريبت لا يمكن معالجة CMYK مع ألفا.

convert -density 288 -colorspace sRGB -resize 25% cover.pdf[0] cover.png
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top