Предпосылка для контекста: я продаю шаблоны Canva для научных ярмарок, выпускных фотоколлажей и т. д., которые крепятся на картон размером 36 x 48 дюймов. Шаблоны в Canva имеют размер 36 x 48 и экспортируются в формате «PDF Print» того же размера. Как только я получаю PDF-файл, я запускаю его через программное обеспечение, поскольку целью программного обеспечения было создание трех отдельных страниц. до нужного размера, а не один большой отпечаток, который будет сложно приклеить к тройному сгибу и который будет слишком большим при транспортировке.
Программа конвертирует PDF в JPG, выполняет действие «нарезки». , затем преобразует его обратно в PDF для печати. Проблема, с которой я столкнулся, заключается в том, что во время этого процесса разрешение значительно снижается.
Я ни в коем случае не программист, но мне удалось открыть программу в Затмение и исследование логики. Я провел небольшое исследование и увидел, что инструменты PDFBox могут устанавливать разрешение JPG во время преобразования из PDF, что я и сделал, используя некоторый код AI, однако это не помогло разрешению.
Мой сын сказал конвертировать в PNG без потерь, и снова я попросил ИИ написать мне код, который тоже, похоже, не работал.
В моей программе есть 4 .java файлы. Файл с кодом преобразования, который я пытаюсь отредактировать, называется .separate.
Два вопроса:
Чтобы скомпилировать это для тестирования, нужны ли мне все 4 файла открыть в Eclipse, когда я экспортирую и создаю работоспособный файл JAR?
Есть ли в коде что-то очевидное, что неправильно? Опять же, я не программист, но стараюсь.
Заранее спасибо за любые предложения.
Вот код для PNG опция в .separate:
Код: Выделить всё
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="Пример после страницы 1" src="https://i.sstatic.net/vhknLCo7.jpg" />


Подробнее здесь: https://stackoverflow.com/questions/793 ... in-java-pd