如何将图像添加到现有的特定pdf页面(Itext)中



我正在开发一个"程序";创建条形码并将其插入原始pdf中。

这是我的代码:

package com.mycompany.barcodeinserter;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
import javax.imageio.ImageIO;
import net.sourceforge.barbecue.output.OutputException;
import org.krysalis.barcode4j.impl.int2of5.Interleaved2Of5Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
/**
*
* @author ale
*/
public class main {
public static void main(String[] args) throws OutputException {

try {
PrintWriter out = new PrintWriter("codici.txt");
PdfWriter writer = new PdfWriter("/Users/ale/Documents/natale.pdf");
PdfReader reader = new PdfReader("/Users/ale/Documents/natale.pdf");
PdfDocument pdfDoc = new PdfDocument(writer); 
Document document = new Document(pdfDoc); 
int z = reader.getNumberOfPages();
String page;
ArrayList<String> codici = new ArrayList<String>();
for (int i = 1; i <= z; i++) {
countchar contatore = new countchar();
page = PdfTextExtractor.getTextFromPage(reader, i);
Scanner scanner = new Scanner(page);
System.out.println("Pagina:" + i + "n");
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.contains("cod")) {
String lineasucces = scanner.nextLine();
System.out.println(lineasucces.replaceAll("[^0-9]", ""));
//countchar contatoredue = new countchar(lineasucces.replaceAll("[^0-9]", ""));
switch (contatore.conta(line.replaceAll("[^0-9]", ""))) {
case 12:
System.out.println(contatore.usingSplitMethod(line.replaceAll("[^0-9]", ""), 6));
for (String element : contatore.usingSplitMethod(line.replaceAll("[^0-9]", ""), 6)) {
if ((element != "") && (element.length() > 4)) {
codici.add(element);
}
}
break;
default:
System.out.println(contatore.usingSplitMethod(line.replaceAll("[^0-9]", ""), 13));
for (String element : contatore.usingSplitMethod(line.replaceAll("[^0-9]", ""), 13)) {
if ((element != "") && (element.length() > 4)) {
codici.add(element);
}
}
break;
}
switch (contatore.conta(lineasucces.replaceAll("[^0-9]", ""))) {
case 12:
for (String element : contatore.usingSplitMethod(lineasucces.replaceAll("[^0-9]", ""), 6)) {
if ((element != "") && (element.length() > 4)) {
codici.add(element);
}
}
break;
default:
for (String element : contatore.usingSplitMethod(lineasucces.replaceAll("[^0-9]", ""), 13)) {
if ((element != "") && (element.length() > 4)) {
codici.add(element);
}
}
break;
}
/*
if (line.endsWith("")) {
System.out.println(contatore.usingSplitMethod(scanner.nextLine().replaceAll("[^0-9]", "").replaceAll("[^0-9]", ""), 13));
try {
switch (contatore.conta()) {
case 12:
System.out.println(contatore.usingSplitMethod(scanner.nextLine().replaceAll("[^0-9]", ""), 6));
for (String element : contatore.usingSplitMethod(scanner.nextLine().replaceAll("[^0-9]", ""), 6)) {
if ((element != "") && (element.length() > 4)) {
codici.add(element);
}
}
break;
default:
System.out.println(contatore.usingSplitMethod(scanner.nextLine().replaceAll("[^0-9]", ""), 13));
for (String element : contatore.usingSplitMethod(scanner.nextLine().replaceAll("[^0-9]", ""), 13)) {
if ((element != "") && (element.length() > 4)) {
codici.add(element);
}
}
break;
}
} catch (NoSuchElementException e) {
System.out.println(e);
}
}
*/
}
}
}
//BarcodeGenerator generator;
int i = 0;
for (String element : codici) {
//generator = new BarcodeGenerator(EncodeTypes.EAN_13, "" + element);
//generator.getParameters().setResolution(400);
//generator.save("" + element + ".png");
out.println(element);
i++;
}
out.close();
File file2 = new File("codici.txt");
BufferedReader br = new BufferedReader(new FileReader(file2));
String st;
while ((st = br.readLine()) != null) {
Interleaved2Of5Bean bean = new Interleaved2Of5Bean();
bean.setHeight(10d);
bean.doQuietZone(false);
OutputStream out2 = new java.io.FileOutputStream(new File(st + ".png"));
BitmapCanvasProvider provider = new BitmapCanvasProvider(out2, "image/x-png", 110, BufferedImage.TYPE_BYTE_GRAY, false, 0);
bean.generateBarcode(provider, st);
provider.finish();
BufferedImage barcodeImage = provider.getBufferedImage();
ImageIO.write(barcodeImage, "png", out2);
}

System.out.println("nn");
System.out.println(codici);
System.out.println(i);

while ((st = br.readLine()) != null) { //here i tried to insert that but i'm stuck
for (int j = 1; j <= z ; j++) {
String page2 = PdfTextExtractor.getTextFromPage(reader, j);
if (page2.contains(st)) {
ImageData imgdata = ImageDataFactory.create(st+".png");
Image image1 = new Image(imgdata);
}

}
}



} catch (IOException e) {
e.printStackTrace();
}
}
}

我想好了如何创建它们,但我在互联网上没有找到任何东西可以帮助我将其添加到特定页面中,而只能添加到所有页面或新页面中(这不是我的目的(。谢谢你的帮助(如果我的英语不完美,很抱歉:(。

以下是如何将条形码或图像添加到现有页面的示例

import com.itextpdf.barcodes.BarcodePDF417;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.canvas.wmf.WmfImageData;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
String filename = "barcodeOnCustomPage.pdf";
PdfReader reader = new PdfReader(filename);
PdfWriter writer = new PdfWriter("out_" + filename);
PdfDocument document = new PdfDocument(reader, writer);
//Add barcode to the existing page
String text = "Sample text for barcode";
BarcodePDF417 barcode = new BarcodePDF417();
barcode.setCode(text);
barcode.placeBarcode(new PdfCanvas(document.getPage(1)), null);
//Add image to the existing page
new PdfCanvas(document.getPage(1)).addImageFittedIntoRectangle(new WmfImageData("example.wmf"),
new Rectangle(200, 0, 0.1f, 0.1f), false);
document.close();
}
}

最新更新