- Ich möchte wissen, wie man diese Warnmeldungen stoppt, da die Informationen von Schriftarten und anderen ignoriert werden können. Der Wert von PDF417 ist eins, dass sich dieses Programm nur darum kümmert. >
Code: Select all
Jan 21, 2025 11:09:55 AM org.apache.pdfbox.pdmodel.font.PDType0Font toUnicode
WARNING: No Unicode mapping for CID+121 (121) in font AllAndNone
Jan 21, 2025 11:09:55 AM org.apache.pdfbox.pdmodel.font.PDType0Font toUnicode
WARNING: No Unicode mapping for CID+89 (89) in font AllAndNone
Jan 21, 2025 11:09:55 AM org.apache.pdfbox.pdmodel.font.PDType0Font toUnicode
WARNING: No Unicode mapping for CID+41 (41) in font AllAndNone
Code: Select all
org.apache.logging.log4j
log4j-api
2.24.3
org.apache.logging.log4j
log4j-core
2.24.3
org.apache.logging.log4j
log4j-slf4j2-impl
2.24.3
com.google.zxing
core
3.4.1
org.apache.pdfbox
pdfbox
2.0.33
org.apache.pdfbox
pdfbox-tools
2.0.33
< /code>
Ich füge hier Java -Code hinzu, um die Probleme zu replizieren, mit denen ich ausgesetzt bin.import org.apache.pdfbox.multipdf.Splitter;
import org.apache.pdfbox.pdmodel.PDDocument;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class SplitSample {
int totalFileCnt;
static Pdf417ReadSvc pdf417;
public static void main(String[] args)
{
SplitSample sbf = new SplitSample();
pdf417 = new Pdf417ReadSvc();
sbf.executeSplit();
System.exit(0);
}
public void executeSplit()
{
String sourceFile = System.getProperty("user.dir") + File.separator + "abc.pdf";
File inputFile = new File(sourceFile);
PDDocument document = null;
int interval = 1;
try {
document = PDDocument.load(inputFile);
PDDocument first4 = getFirst4Pages(document);
interval = pdf417.findIndivPdfCnt(first4);
first4.close();
doSplit(document, 1, 4, interval, 0);
}
catch (IOException e) {
e.printStackTrace();
}
try {
if (document != null) {
document.close();
}
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
private void doSplit(PDDocument document, int start, int end, int interval, int batchSeq)
throws IOException
{
Splitter splitter = new Splitter();
splitter.setStartPage(start);
splitter.setEndPage(end);
splitter.setSplitAtPage(interval);
List
splittedDocuments = splitter.split(document);
String outputPath = "C:\\Test";
for (int index = 0; index < splittedDocuments.size(); index++) {
String pdfFullPath = outputPath + File.separator + batchSeq + "_" + index + start + ".pdf";
PDDocument splittedDocument = splittedDocuments.get(index);
splittedDocument.save(pdfFullPath);
splittedDocument.close();
totalFileCnt++;
}
}
PDDocument getFirst4Pages(PDDocument doc)
{
Splitter splitter = new Splitter();
splitter.setStartPage(1);
splitter.setEndPage(5);
splitter.setSplitAtPage(4);
List splittedDocuments;
try {
splittedDocuments = splitter.split(doc);
}
catch (IOException e) {
throw new RuntimeException(e);
}
PDDocument first4Pages = splittedDocuments.get(0);
return first4Pages;
}
}
< /code>
pdf417readsvc.java
import com.google.zxing.*;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.multi.MultipleBarcodeReader;
import com.google.zxing.pdf417.PDF417Reader;
import com.google.zxing.pdf417.PDF417ResultMetadata;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.pdfbox.multipdf.Splitter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.StringWriter;
import java.util.*;
public class Pdf417ReadSvc {
Logger log = LogManager.getLogger(Pdf417ReadSvc.class);
String pdf417Code;
private static PDF417ResultMetadata getMeta(Result result)
{
return result.getResultMetadata() == null ? null : (PDF417ResultMetadata) result.getResultMetadata().get(
ResultMetadataType.PDF417_EXTRA_METADATA);
}
int findIndivPdfCnt(PDDocument first4)
{
int tempCnt = 1;
PDFRenderer pdfRenderer = new PDFRenderer(first4);
int pCnt = first4.getNumberOfPages();
try {
for (int i = 0; i < pCnt; i++) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(i, 300, ImageType.RGB);
pdf417Code = readPdf417BarcodeFromImage(bim);
if (pdf417Code.trim().isEmpty()) {
tempCnt++;
} else {
break;
}
} // end of 'for' loop
}
catch (IOException e) {
log.error("(findIndivPdfCnt) Error to render image: ", e);
return -1;
}
return tempCnt;
}
public String readPdf417BarcodeFromImage(BufferedImage image)
{
StringWriter result = new StringWriter();
MultipleBarcodeReader barcodeReader = new PDF417Reader();
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Map hints = new EnumMap(DecodeHintType.class);
hints.put(DecodeHintType.TRY_HARDER, Boolean.FALSE);
List results = new ArrayList();
try {
results.addAll(Arrays.asList(barcodeReader.decodeMultiple(bitmap, hints)));
}
catch (NotFoundException e) {
log.debug("no barcodes were found on given image");
}
results.sort(Comparator.comparingInt((Result r) -> Objects.requireNonNull(getMeta(r)).getSegmentIndex()));
results.forEach(r -> result.append(r.getText()));
return result.toString();
}
}
< /code>
buffenedImageluminancesource.java
/*
* Copyright 2009 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.google.zxing.LuminanceSource;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
/**
* class was copied from ZXing unit test
*
* This LuminanceSource implementation is meant for J2SE clients and our blackbox unit tests.
*
* @author dswitkin@google.com (Daniel Switkin)
* @author Sean Owen
* @author code@elektrowolle.de (Wolfgang Jung)
*/
public final class BufferedImageLuminanceSource extends LuminanceSource {
private static final double MINUS_45_IN_RADIANS = -0.7853981633974483; // Math.toRadians(-45.0)
private final BufferedImage image;
private final int left;
private final int top;
public BufferedImageLuminanceSource(BufferedImage image) {
this(image, 0, 0, image.getWidth(), image.getHeight());
}
public BufferedImageLuminanceSource(BufferedImage image, int left, int top, int width, int height) {
super(width, height);
if (image.getType() == BufferedImage.TYPE_BYTE_GRAY) {
this.image = image;
} else {
int sourceWidth = image.getWidth();
int sourceHeight = image.getHeight();
if (left + width > sourceWidth || top + height > sourceHeight) {
throw new IllegalArgumentException("Crop rectangle does not fit within image data.");
}
this.image = new BufferedImage(sourceWidth, sourceHeight, BufferedImage.TYPE_BYTE_GRAY);
WritableRaster raster = this.image.getRaster();
int[] buffer = new int[width];
for (int y = top; y < top + height; y++) {
image.getRGB(left, y, width, 1, buffer, 0, sourceWidth);
for (int x = 0; x < width; x++) {
int pixel = buffer[x];
// The color of fully-transparent pixels is irrelevant. They are often, technically, fully-transparent
// black (0 alpha, and then 0 RGB). They are often used, of course as the "white" area in a
// barcode image. Force any such pixel to be white:
if ((pixel & 0xFF000000) == 0) {
// white, so we know its luminance is 255
buffer[x] = 0xFF;
} else {
// .299R + 0.587G + 0.114B (YUV/YIQ for PAL and NTSC),
// (306*R) >> 10 is approximately equal to R*0.299, and so on.
// 0x200 >> 10 is 0.5, it implements rounding.
buffer[x] =
(306 * ((pixel >> 16) & 0xFF) +
601 * ((pixel >> 8) & 0xFF) +
117 * (pixel & 0xFF) +
0x200) >> 10;
}
}
raster.setPixels(left, y, width, 1, buffer);
}
}
this.left = left;
this.top = top;
}
@Override
public byte[] getRow(int y, byte[] row) {
if (y < 0 || y >= getHeight()) {
throw new IllegalArgumentException("Requested row is outside the image: " + y);
}
int width = getWidth();
if (row == null || row.length < width) {
row = new byte[width];
}
// The underlying raster of image consists of bytes with the luminance values
image.getRaster().getDataElements(left, top + y, width, 1, row);
return row;
}
@Override
public byte[] getMatrix() {
int width = getWidth();
int height = getHeight();
int area = width * height;
byte[] matrix = new byte[area];
// The underlying raster of image consists of area bytes with the luminance values
image.getRaster().getDataElements(left, top, width, height, matrix);
return matrix;
}
@Override
public boolean isCropSupported() {
return true;
}
@Override
public LuminanceSource crop(int left, int top, int width, int height) {
return new BufferedImageLuminanceSource(image, this.left + left, this.top + top, width, height);
}
/**
* This is always true, since the image is a gray-scale image.
*
* @return true
*/
@Override
public boolean isRotateSupported() {
return true;
}
@SuppressWarnings("SuspiciousNameCombination")
@Override
public LuminanceSource rotateCounterClockwise() {
int sourceWidth = image.getWidth();
int sourceHeight = image.getHeight();
// Rotate 90 degrees counterclockwise.
AffineTransform transform = new AffineTransform(0.0, -1.0, 1.0, 0.0, 0.0, sourceWidth);
// Note width/height are flipped since we are rotating 90 degrees.
BufferedImage rotatedImage = new BufferedImage(sourceHeight, sourceWidth, BufferedImage.TYPE_BYTE_GRAY);
// Draw the original image into rotated, via transformation
Graphics2D g = rotatedImage.createGraphics();
g.drawImage(image, transform, null);
g.dispose();
// Maintain the cropped region, but rotate it too.
int width = getWidth();
return new BufferedImageLuminanceSource(rotatedImage, top, sourceWidth - (left + width), getHeight(), width);
}
@Override
public LuminanceSource rotateCounterClockwise45() {
int width = getWidth();
int height = getHeight();
int oldCenterX = left + width / 2;
int oldCenterY = top + height / 2;
// Rotate 45 degrees counterclockwise.
AffineTransform transform = AffineTransform.getRotateInstance(MINUS_45_IN_RADIANS, oldCenterX, oldCenterY);
int sourceDimension = Math.max(image.getWidth(), image.getHeight());
BufferedImage rotatedImage = new BufferedImage(sourceDimension, sourceDimension, BufferedImage.TYPE_BYTE_GRAY);
// Draw the original image into rotated, via transformation
Graphics2D g = rotatedImage.createGraphics();
g.drawImage(image, transform, null);
g.dispose();
int halfDimension = Math.max(width, height) / 2;
int newLeft = Math.max(0, oldCenterX - halfDimension);
int newTop = Math.max(0, oldCenterY - halfDimension);
int newRight = Math.min(sourceDimension - 1, oldCenterX + halfDimension);
int newBottom = Math.min(sourceDimension - 1, oldCenterY + halfDimension);
return new BufferedImageLuminanceSource(rotatedImage, newLeft, newTop, newRight - newLeft, newBottom - newTop);
}
}
< /code>
Ich konnte keine Beispielpdf -Datei angeben. Es werden jedoch 2 Screenshots der PDF -Eigenschaften angehängt.>