it-swarm.com.de

Konvertieren PDF mit hoher Auflösung

Ich versuche, das Befehlszeilenprogramm convert zu verwenden, um eine PDF in ein Bild (JPEG oder PNG) aufzunehmen. Hier ist eines der PDFs das ich versuche zu konvertieren. 

Ich möchte, dass das Programm die überschüssige Leerstelle abschneidet und ein qualitativ hochwertiges Bild liefert, damit die Superskripte problemlos gelesen werden können.

Dies ist mein aktueller bester Versuch . Wie Sie sehen, funktioniert das Trimmen gut, ich muss nur die Auflösung etwas erhöhen. Dies ist der Befehl, den ich verwende: 

convert -trim 24.pdf -resize 500% -quality 100 -sharpen 0x1.0 24-11.jpg

Ich habe versucht, die folgenden bewussten Entscheidungen zu treffen:

  • größe vergrößern (hat keinen Einfluss auf die Auflösung)
  • machen sie die qualität so hoch wie möglich
  • benutze den -sharpen (ich habe eine Reihe von Werten ausprobiert)

Anregungen bitte, um die Auflösung des Bildes im endgültigen PNG/JPEG-Format zu erhöhen, wären sehr dankbar!

265
JBWhitmore

Es scheint, dass die folgenden Arbeiten funktionieren: 

convert           \
   -verbose       \
   -density 150   \
   -trim          \
    test.pdf      \
   -quality 100   \
   -flatten       \
   -sharpen 0x1.0 \
    24-18.jpg

Es ergibt sich zu dem linken Bild . Vergleichen Sie dies mit dem Ergebnis meines ursprünglichen Befehls ( das Bild rechts ):

(Um wirklich die Unterschiede zwischen den beiden zu sehen und zu schätzen, klicken Sie mit der rechten Maustaste darauf und wählen Sie "Bild in neuem Tab öffnen".

Beachten Sie auch die folgenden Fakten:

  • Das schlechtere, unscharfe Bild auf der rechten Seite hat eine Dateigröße von 1.941.702 Bytes (1.85 MByte) . Die Auflösung beträgt 3060 x 3960 Pixel und verwendet einen 16-Bit-RGB-Farbraum.
  • Das bessere, scharfe Bild auf der linken Seite hat eine Dateigröße von 337,879 Bytes (330 kByte) . Die Auflösung beträgt 758 x 996 Pixel, wobei der 8-Bit-Grau-Farbraum verwendet wird.

Also keine Notwendigkeit, die Größe zu ändern; Fügen Sie das Flag -density hinzu. Der Dichtewert 150 ist seltsam - der Versuch eines Wertebereichs führt zu einem schlechter aussehenden Bild in beide Richtungen!

339
JBWhitmore

Persönlich gefällt mir das.

convert -density 300 -trim test.pdf -quality 100 test.jpg

Es ist etwas mehr als doppelt so groß wie die Dateigröße, aber es sieht für mich besser aus.

-density 300 legt die dpi fest, mit der PDF gerendert wird.

-trim entfernt alle Randpixel, die dieselbe Farbe wie die Eckpixel haben.

-quality 100 setzt die JPEG-Komprimierungsqualität auf die höchste Qualität.

Dinge wie -sharpen funktionieren nicht gut mit Text, da sie die Dinge rückgängig machen, die Ihr Font-Rendering-System getan hat, um es lesbarer zu machen.

Wenn Sie es wirklich in die Luft sprengen möchten, verwenden Sie hier die Größenänderung und möglicherweise einen größeren dpi-Wert von targetDPI * scalingFactor. Dadurch wird PDF mit der Auflösung/Größe gerendert, die Sie beabsichtigen.

Beschreibungen der Parameter auf imagemagick.org sind hier

126
majinnaibu

Ich verwende pdftoppm in der Befehlszeile, um das Ausgangsbild zu erhalten, normalerweise mit einer Auflösung von 300 dpi, also pdftoppm -r 300, und dann convert zum Trimmen und zur PNG-Konvertierung.

15
Norman Ramsey

Ich habe es sowohl schneller als auch stabiler gefunden, wenn große PDFs in Batches in PNGs und JPGs verarbeitet werden, um den zugrunde liegenden gs (alias Ghostscript) -Befehl zu verwenden, den convert verwendet.

Sie können den Befehl in der Ausgabe von convert -verbose sehen, und es sind einige weitere Änderungen (YMMV) möglich, auf die über convert ein direkter Zugriff nicht möglich ist.

Es ist jedoch schwieriger, das Trimmen und Schärfen mit gs durchzuführen, also, wie gesagt, YMMV!

13
Coder

normalerweise extrahiere ich das eingebettete Bild mit 'pdfimages' in der nativen Auflösung und verwende dann ImageMagicks Konvertierung in das benötigte Format:

$ pdfimages -list fileName.pdf
$ pdfimages fileName.pdf fileName   # save in .ppm format
$ convert fileName-000.ppm fileName-000.png

dies erzeugt die beste und kleinste Ergebnisdatei.

Hinweis: Für verlustbehaftete JPG-Bilder mussten Sie -j verwenden:

$ pdfimages -j fileName.pdf fileName   # save in .jpg format

Mit dem letzten Poppler können Sie -all verwenden, das verlustbehaftet als jpg und verlustfrei als png speichert

Auf der wenig bereitgestellten Win-Plattform mussten Sie ein aktuelles (0.37 2015) "poppler-util" -binäres Programm herunterladen: http://blog.alivate.com.au/poppler-windows/

12
Valerio

Es gibt auch gute Ergebnisse:

exec("convert -geometry 1600x1600 -density 200x200 -quality 100 test.pdf test_image.jpg");
8
Preet Sandhu

Ein weiterer Vorschlag ist, dass Sie GIMP verwenden können. 

Laden Sie einfach die PDF -Datei in GIMP-> Speichern als .xcf und Sie können dann alles tun, was Sie möchten.

2
Armin Mustafa

Linux-Benutzer hier: Ich habe das convert-Befehlszeilenprogramm (für PDF für PNG) ausprobiert und war mit den Ergebnissen nicht zufrieden. Ich fand das einfacher, mit einem besseren Ergebnis:

  • extrahiere die pdf-Seite (n) mit pdftk
    • z.B.: pdftk file.pdf cat 3 output page3.pdf
  • Öffnen (importieren) Sie das PDF mit GIMP
    • wichtig: Ändern Sie den Import Resolution von 100 in 300 oder 600 pixel/in.
  • in GIMP als PNG exportieren (Dateierweiterung in .png ändern)

Bearbeiten:

Bild hinzugefügt, wie in der Comments angefordert. Konvertierter Befehl verwendet:

convert -density 300 -trim struct2vec.pdf -quality 100 struct2vec.png

GIMP: importiert mit 300 dpi (px/in); als PNG-Komprimierungsstufe 3 exportiert.

Ich habe GIMP in der Befehlszeile nicht verwendet (siehe unten: mein Kommentar).

 pdf2png

 enter image description here

2
Victoria Stuart

Das folgende Python-Skript funktioniert auf jedem Mac (Snow Leopard und höher). Es kann in der Befehlszeile mit aufeinanderfolgenden PDF -Dateien als Argumente verwendet werden, oder Sie können in Automator eine Aktion "Shell-Skript ausführen" ausführen und einen Dienst erstellen (Schnellaktion in Mojave).

Sie können die Auflösung des Ausgabebildes im Skript einstellen.

Das Skript und eine Schnellaktion können von github heruntergeladen werden.

#!/usr/bin/python
# coding: utf-8

import os, sys
import Quartz as Quartz
from LaunchServices import (kUTTypeJPEG, kUTTypeTIFF, kUTTypePNG, kCFAllocatorDefault) 

resolution = 300.0 #dpi
scale = resolution/72.0

cs = Quartz.CGColorSpaceCreateWithName(Quartz.kCGColorSpaceSRGB)
whiteColor = Quartz.CGColorCreate(cs, (1, 1, 1, 1))
# Options: kCGImageAlphaNoneSkipLast (no trans), kCGImageAlphaPremultipliedLast 
transparency = Quartz.kCGImageAlphaNoneSkipLast

#Save image to file
def writeImage (image, url, type, options):
    destination = Quartz.CGImageDestinationCreateWithURL(url, type, 1, None)
    Quartz.CGImageDestinationAddImage(destination, image, options)
    Quartz.CGImageDestinationFinalize(destination)
    return

def getFilename(filepath):
    i=0
    newName = filepath
    while os.path.exists(newName):
        i += 1
        newName = filepath + " %02d"%i
    return newName

if __== '__main__':

    for filename in sys.argv[1:]:
        pdf = Quartz.CGPDFDocumentCreateWithProvider(Quartz.CGDataProviderCreateWithFilename(filename))
        numPages = Quartz.CGPDFDocumentGetNumberOfPages(pdf)
        shortName = os.path.splitext(filename)[0]
        prefix = os.path.splitext(os.path.basename(filename))[0]
        folderName = getFilename(shortName)
        try:
            os.mkdir(folderName)
        except:
            print "Can't create directory '%s'"%(folderName)
            sys.exit()

        # For each page, create a file
        for i in range (1, numPages+1):
            page = Quartz.CGPDFDocumentGetPage(pdf, i)
            if page:
        #Get mediabox
                mediaBox = Quartz.CGPDFPageGetBoxRect(page, Quartz.kCGPDFMediaBox)
                x = Quartz.CGRectGetWidth(mediaBox)
                y = Quartz.CGRectGetHeight(mediaBox)
                x *= scale
                y *= scale
                r = Quartz.CGRectMake(0,0,x, y)
        # Create a Bitmap Context, draw a white background and add the PDF
                writeContext = Quartz.CGBitmapContextCreate(None, int(x), int(y), 8, 0, cs, transparency)
                Quartz.CGContextSaveGState (writeContext)
                Quartz.CGContextScaleCTM(writeContext, scale,scale)
                Quartz.CGContextSetFillColorWithColor(writeContext, whiteColor)
                Quartz.CGContextFillRect(writeContext, r)
                Quartz.CGContextDrawPDFPage(writeContext, page)
                Quartz.CGContextRestoreGState(writeContext)
        # Convert to an "Image"
                image = Quartz.CGBitmapContextCreateImage(writeContext) 
        # Create unique filename per page
                outFile = folderName +"/" + prefix + " %03d.png"%i
                url = Quartz.CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, outFile, len(outFile), False)
        # kUTTypeJPEG, kUTTypeTIFF, kUTTypePNG
                type = kUTTypePNG
        # See the full range of image properties on Apple's developer pages.
                options = {
                    Quartz.kCGImagePropertyDPIHeight: resolution,
                    Quartz.kCGImagePropertyDPIWidth: resolution
                    }
                writeImage (image, url, type, options)
                del page
0
benwiggy

Ich benutze icepdf eine Open Source Java PDF-Engine. Überprüfen Sie die Office-Demo .

package image2pdf;

import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;
import javax.imageio.ImageIO;
import Java.awt.image.BufferedImage;
import Java.awt.image.RenderedImage;
import Java.io.File;
import Java.io.FileNotFoundException;
import Java.io.IOException;

public class pdf2image {

   public static void main(String[] args) {

      Document document = new Document();
      try {
         document.setFile("C:\\Users\\Dell\\Desktop\\test.pdf");
      } catch (PDFException ex) {
         System.out.println("Error parsing PDF document " + ex);
      } catch (PDFSecurityException ex) {
         System.out.println("Error encryption not supported " + ex);
      } catch (FileNotFoundException ex) {
         System.out.println("Error file not found " + ex);
      } catch (IOException ex) {
         System.out.println("Error IOException " + ex);
      }

      // save page captures to file.
      float scale = 1.0f;
      float rotation = 0f;

      // Paint each pages content to an image and
      // write the image to file
      for (int i = 0; i < document.getNumberOfPages(); i++) {
         try {
         BufferedImage image = (BufferedImage) document.getPageImage(
             i, GraphicsRenderingHints.PRINT, Page.BOUNDARY_CROPBOX, rotation, scale);

         RenderedImage rendImage = image;
         try {
            System.out.println(" capturing page " + i);
            File file = new File("C:\\Users\\Dell\\Desktop\\test_imageCapture1_" + i + ".png");
            ImageIO.write(rendImage, "png", file);
         } catch (IOException e) {
            e.printStackTrace();
         }
         image.flush();
         }catch(Exception e){
             e.printStackTrace();
         }
      }

      // clean up resources
      document.dispose();
   }
}

Ich habe auch versucht imagemagick und pdftoppm , sowohl pdftoppm als auch icepdf haben eine höhere Auflösung als imagemagick.

0
Kris Roofe

Das hat bei mir einwandfrei funktioniert

Befolgen Sie diese einfachen Schritte, um Bilder in einem beliebigen Format aus PDF Dokumenten zu extrahieren

  1. Download GIMP-Bildbearbeitungsprogramm
  2. Öffnen Sie das Programm nach der Installation
  3. Öffnen Sie das PDF Dokument, das Sie extrahieren möchten
  4. Wählen Sie nur die Seiten des Dokuments PDF aus, aus denen Sie Bilder extrahieren möchten. N/B: Wenn Sie nur die Titelbilder benötigen, wählen Sie nur die erste Seite aus.
  5. Klicken Sie auf Öffnen, nachdem Sie die Seiten ausgewählt haben, von denen Sie Bilder extrahieren möchten
  6. Klicken Sie auf Datei Menü, wenn GIMP die Seiten öffnet
  7. Wählen Sie Exportieren als im Menü Datei
  8. Wählen Sie Ihren bevorzugten Dateityp anhand der Erweiterung (z. B. png) unter dem angezeigten Dialogfeld aus.
  9. Klicken Sie auf ** Exportieren *, um Ihr Bild an den gewünschten Ort zu exportieren.
  10. Sie können dann Ihren Datei-Explorer auf das exportierte Bild überprüfen.

Das ist alles.

Ich hoffe das hilft.

Erweitere diese Antwort als nützlich, wenn es hilft, oder kommentiere sie unter der Antwort, um mehr Klarheit zu schaffen.

0
Promise Preston

Verwenden Sie diese Befehlszeile:

convert -geometry 3600x3600 -density 300x300 -quality 100 TEAM\ 4.pdf team4.png

Dies sollte die Datei korrekt konvertieren, wie Sie gefragt haben.

In ImageMagick können Sie "Supersampling" durchführen. Sie geben eine große Dichte an und verkleinern sie dann so weit, wie es für die endgültige Ausgabegröße erforderlich ist. Zum Beispiel mit Ihrem Bild:

convert -density 600 test.pdf -background white -flatten -resize 25% test.png


 enter image description here 

Laden Sie das Bild herunter, um es zum Vergleich in voller Auflösung anzuzeigen.

Ich empfehle nicht, in JPG zu speichern, wenn Sie eine weitere Verarbeitung erwarten.

Wenn Sie möchten, dass die Ausgabe dieselbe Größe wie die Eingabe hat, ändern Sie die Größe in den Kehrwert des Verhältnisses Ihrer Dichte zu 72. Beispiel: -density 288 und -resize 25%. 288 = 4 * 72 und 25% = 1/4

Je höher die Dichte, desto besser die resultierende Qualität. Die Verarbeitung dauert jedoch länger.

0
fmw42

Die angehängte PNG-Datei sieht sehr unscharf aus. Wenn Sie für jedes als PDF -Vorschau erzeugte Bild eine zusätzliche Nachbearbeitung verwenden müssen, verringern Sie die Leistung Ihrer Lösung.

2JPEG kann PDF -Datei konvertieren, die Sie an eine Nice-Schärf-JPG-Datei angehängt haben, und leere Ränder in einem Aufruf zuschneiden:

2jpeg.exe -src "C:\In\*.*" -dst "C:\Out" -oper Crop method:autocrop
0
Mikhael

Mit der Vorschau auf einem Mac ist das eigentlich ganz einfach. Sie müssen lediglich die Datei in der Vorschau öffnen und ein PNG- oder JPEG-Bild speichern (oder exportieren). Stellen Sie jedoch sicher, dass Sie am unteren Rand des Fensters mindestens 300 dpi verwenden, um ein qualitativ hochwertiges Bild zu erhalten.

0
Jeff White