Hintergrund für den Kontext: Ich verkaufe Canva-Vorlagen für Wissenschaftsmessen, Abschlussfotocollagen usw., die auf 36 x 48 Zoll großen Karton montiert sind Die Vorlagen in Canva sind 36 x 48 groß und werden als „PDF-Druck“ in derselben Größe exportiert. Sobald ich die PDF-Datei erhalte, lasse ich sie durch die Software laufen, da das Ziel der Software darin bestand, drei einzelne Seiten zu schneiden auf die richtige Größe und nicht auf einen einzelnen großen Ausdruck, der sich nur schwer auf die Dreifachfalte kleben lässt und für den Versand übergroß ist.
Das Programm konvertiert die PDF-Datei in JPG und führt den „Slicing“-Vorgang durch und konvertiert es dann zurück Das Problem, das ich sehe, ist, dass die Auflösung während dieses Vorgangs erheblich abnimmt.
Ich bin keineswegs Programmierer, aber ich konnte das Programm in Eclipse öffnen Untersuche die Logik. Ich habe einige Nachforschungen angestellt und festgestellt, dass die PDFBox-Tools in der Lage sind, die DPI des JPG während der Konvertierung von PDF festzulegen, was ich mit etwas Code von AI getan habe, aber es hat die Auflösung nicht verbessert.
Mein Sohn sagte, er solle in PNG konvertieren, was verlustfrei ist, und wieder ließ ich mir von der KI Code schreiben, der ebenfalls nicht zu funktionieren schien.
Das Programm, das ich habe, hat 4 .java Dateien. Die Datei mit dem Konvertierungscode, die ich zu bearbeiten versucht habe, heißt .separate.
Zwei Fragen:
Um dies zu Testzwecken zu kompilieren, benötige ich alle 4 Dateien in Eclipse öffnen, wenn ich eine ausführbare JAR-Datei exportiere und erstelle?
Ist im Code offensichtlich etwas falsch? Auch hier gilt: Ich bin kein Programmierer, aber ich versuche es.
Vielen Dank im Voraus für alle Vorschläge.
Hier ist der Code für das PNG Option in .separate:
Code: Select all
package abc;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.rendering.PDFRenderer;
public class Separate {
private File file;
private static PDDocument pdf;
private float lefta;
private float leftb;
private float centrea;
private float centreb;
private float righta;
private float rightb;
private int height;
public Separate(File f, float[] nums) {
file = f;
lefta = nums[0];
leftb = nums[1];
centrea = nums[2];
centreb = nums[3];
righta = nums[4];
rightb = nums[5];
}
public PDDocument Divide_pdf() throws IOException {
pdf = Loader.loadPDF(file);
BufferedImage image = convertto_png(pdf);
height = image.getHeight();
List images = operate(image);
PDDocument proc_document = convertto_pdf(images);
pdf.close();
return proc_document;
}
public BufferedImage convertto_png(PDDocument doc) throws IOException {
PDFRenderer renderer = new PDFRenderer(doc);
// Set DPI (e.g., 600 DPI) for high-resolution rendering
int dpi = 600;
BufferedImage img = renderer.renderImageWithDPI(0, dpi);
return img;
}
public List operate(BufferedImage image) throws IOException {
lefta = lefta * 72;
leftb = leftb * 72;
centrea = centrea * 72;
centreb = centreb * 72;
righta = righta * 72;
rightb = rightb * 72;
BufferedImage img1 = image.getSubimage(((int) lefta), 0, ((int) (leftb - lefta)), image.getHeight());
BufferedImage img2 = image.getSubimage(((int) centrea), 0, (((int) centreb) - ((int) centrea)), image.getHeight());
BufferedImage img3 = image.getSubimage(((int) righta), 0, (((int) rightb) - ((int) righta) - 1), image.getHeight());
List images = new ArrayList();
images.add(img1);
images.add(img2);
images.add(img3);
return images;
}
public PDDocument convertto_pdf(List files) throws IOException {
List images = new ArrayList();
for (BufferedImage image : files) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// Save as PNG with high quality
ImageWriter pngWriter = ImageIO.getImageWritersByFormatName("png").next();
ImageWriteParam pngWriteParam = pngWriter.getDefaultWriteParam();
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
pngWriter.setOutput(ios);
pngWriter.write(null, new javax.imageio.IIOImage(image, null, null), pngWriteParam);
byte[] bytes = baos.toByteArray();
images.add(bytes);
}
PDDocument document = new PDDocument();
List
rectangles = new ArrayList();
PDRectangle rec = new PDRectangle(0, 0, ((int) leftb), height);
PDRectangle rec1 = new PDRectangle(0, 0, (((int) centreb) - ((int) centrea)), height);
PDRectangle rec2 = new PDRectangle(0, 0, (((int) rightb) - ((int) righta) - 1), height);
rectangles.add(rec);
rectangles.add(rec1);
rectangles.add(rec2);
int i = 0;
for (byte[] f : images) {
PDPage page = new PDPage();
page.setMediaBox(rectangles.get(i));
document.addPage(page);
PDImageXObject img = PDImageXObject.createFromByteArray(document, f, "output");
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.drawImage(img, 0, 0);
contentStream.close();
i++;
}
return document;
}
}

< img alt="Beispiel nach Seite 1" src="https://i.sstatic.net/vhknLCo7.jpg" />

