日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

pdf 中的java运行,java - 从pdf文件读取特定位置的itext在intellij中运行,并提供所需的输出,但是可执行jar抛出错误 - 堆栈内存溢出...

發(fā)布時(shí)間:2024/10/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pdf 中的java运行,java - 从pdf文件读取特定位置的itext在intellij中运行,并提供所需的输出,但是可执行jar抛出错误 - 堆栈内存溢出... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我正在從n個(gè)頁(yè)面的輸入pdf文件中讀取特定位置,并在這些位置上列出文本。 然后,我編寫一個(gè)新的pdf文檔,并將列表中的這些字符串寫入包含單元格的表中。 我提出了兩個(gè)主要問(wèn)題。

我想在表中有三列,但是如果列表中的字符串不是3的倍數(shù)(即列數(shù)),那么它將留下多余的字符串,并且不會(huì)打印它們。 例如,如果我要打印4個(gè)字符串,則程序?qū)⒃诘谝恍械娜齻€(gè)單元格中打印前三個(gè)字符串,但會(huì)保留一個(gè)字符串。 我編寫了一些代碼來(lái)檢查字符串的數(shù)量,并將其設(shè)為3的mod( % ),并在其中添加了帶點(diǎn)(。)的空白單元格,以提供多余的單元格來(lái)完成該行,從而不留任何字符串。 有更好的方法嗎?

當(dāng)我運(yùn)行主類時(shí),該程序在intellij中運(yùn)行,并為我生成輸出pdf文件。 但是,當(dāng)我制作可執(zhí)行jar并通過(guò)雙擊運(yùn)行它時(shí),它什么也沒(méi)有做。 為了再次檢查,我在intellij終端中運(yùn)行了jar,發(fā)現(xiàn)它引發(fā)了以下錯(cuò)誤:

現(xiàn)在,為什么在intellij中運(yùn)行它時(shí)也不會(huì)出現(xiàn)相同的問(wèn)題? 我該如何克服這個(gè)問(wèn)題? 我在Eclipse中重新編寫了整個(gè)項(xiàng)目,而eclipse根本不編譯它,并給出了intellij命令行中可執(zhí)行文件運(yùn)行的問(wèn)題。

這是我在項(xiàng)目中擁有的三個(gè)班級(jí):

package addressLabels;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.pdf.PdfReader;

import com.itextpdf.text.pdf.parser.FilteredTextRenderListener;

import com.itextpdf.text.pdf.parser.LocationTextExtractionStrategy;

import com.itextpdf.text.pdf.parser.PdfTextExtractor;

import com.itextpdf.text.pdf.parser.RegionTextRenderFilter;

import com.itextpdf.text.pdf.parser.RenderFilter;

import com.itextpdf.text.pdf.parser.TextExtractionStrategy;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

public class Driver {

public static final String SRC = "C:/temp/ebay.pdf";

public static void main(String[] args) throws IOException, DocumentException {

ReadCertainLocationOnPageInPdf contentsObj = new ReadCertainLocationOnPageInPdf(SRC);

WritePdf writer = new WritePdf(contentsObj.getListOfAddresses());

//contentsObj.printListOfAddresses();

}

}//class Driver ends here.

package addressLabels;

import com.itextpdf.text.Rectangle;

import com.itextpdf.text.pdf.PdfReader;

import com.itextpdf.text.pdf.parser.*;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class ReadCertainLocationOnPageInPdf {

//private String cleanTextMarkedForTokenization;

private List listOfAddresses;

public ReadCertainLocationOnPageInPdf(String pdfFileAddress){

this.listOfAddresses = new ArrayList();

parsePdf(pdfFileAddress);

}//constructor ends here.

private void parsePdf(String pdfFileAddress) {

File f = new File(pdfFileAddress);

if (f.isFile() && f.canRead()){

try {

PdfReader reader = new PdfReader(pdfFileAddress);

int numPages = reader.getNumberOfPages();

//Get information about the page size

//Rectangle mediabox = reader.getPageSize(1);

//printDataAboutThisPage(mediabox);

//StringBuilder sb = new StringBuilder("");

for (int pageNum = 1; pageNum <= numPages; pageNum++){

String oneAddress = getTextFromThisPage(pageNum, reader);

this.addOneAddressToListOfAddresses(oneAddress);

//sb.append(getTextFromThisPage(pageNum, reader)).append("\n\n");

}

//this.addOneAddressToListOfAddresses(sb.toString());

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

}//if ends here

//System.out.println(sb.toString());

}

private void printDataAboutThisPage(Rectangle mediabox) {

//Lower left corner is x

float x = mediabox.getRight();

float y = mediabox.getTop();

System.out.println("Lower left corner: " + x);

System.out.println("Upper right conrner: " + y);

System.out.println("The values of x increase from left to right; the values of y increase from bottom to top. \n The unit of the measurement system in PDF is called \"user unit\". \n By default one user unit coincides with one point (this can change, but you won't find many PDFs with a different UserUnit value).\n In normal circumstances, 72 user units = 1 inch.");

}

private String getTextFromThisPage(int pageNo, PdfReader reader) throws IOException {

//java.awt.geom.Rectangle2D rect = new java.awt.geom.Rectangle2D.Float(226, 547, 240, 158);

java.awt.geom.Rectangle2D rect = new java.awt.geom.Rectangle2D.Float(226, 547, 240, 158);

RenderFilter regionFilter = new RegionTextRenderFilter(rect);

TextExtractionStrategy strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), regionFilter);

String t = PdfTextExtractor.getTextFromPage(reader, pageNo, strategy);

t = this.cleanOneLabel(t);

return t;

}

private String cleanOneLabel(String t) {

StringBuilder sb2 = new StringBuilder("");

String[] lines = t.split(System.getProperty("line.separator"));

for(String s:lines) {

if(!s.equals(""))

sb2.append(s).append("\n");

}

String pattern = "(?m)^\\s*\\r?\\n|\\r?\\n\\s*(?!.*\\r?\\n)";

String replacement = "";

return sb2.toString().replaceAll(pattern, replacement);// ??? s = s.replaceAll("\n+", "\n");

}

private String cleanOneLabel2(String t) {

StringBuilder sb2 = new StringBuilder("");

String[] lines = t.split(System.getProperty("line.separator"));

for(int i = 0; i < lines.length; i++) {

if(lines[i].contains("Post to:")) {

lines[i] = lines[i].replace("Post to:", "pakbay-Post to:");

}

}

for(String s:lines) {

if(!s.equals(""))

sb2.append(s).append("\n");

}

String pattern = "(?m)^\\s*\\r?\\n|\\r?\\n\\s*(?!.*\\r?\\n)";

String replacement = "";

return sb2.toString().replaceAll(pattern, replacement);// ??? s = s.replaceAll("\n+", "\n");

}

public List getListOfAddresses(){

return this.listOfAddresses;

}

public void printListOfAddresses(){

for(int i = 0; i < listOfAddresses.size(); i++){

System.out.print(listOfAddresses.get(i));

}

}

public void addOneAddressToListOfAddresses(String oneAddress) {

//clean the string before adding it to the list of addresses.

//Remove extra spaces, tabs and blank lines from the passed string.

String pattern = "(?m)^\\s*\\r?\\n|\\r?\\n\\s*(?!.*\\r?\\n)";

String replacement = "";

oneAddress = oneAddress.replaceAll(pattern, replacement);

//Add the cleaned address to the list of addresses.

this.listOfAddresses.add(oneAddress);

}

}//class ReadCertainLocationOnPageInPdf ends here.

package addressLabels;

import java.io.FileOutputStream;

import java.util.Date;

import com.itextpdf.text.*;

import com.itextpdf.text.pdf.PdfPCell;

import com.itextpdf.text.pdf.PdfPTable;

import com.itextpdf.text.pdf.PdfWriter;

public class WritePdf {

private static String FILE = "C:/temp/ebay-output.pdf";

private java.util.List listOfAddresses;

public WritePdf(java.util.List listOfAddresses) {

this.listOfAddresses = listOfAddresses;

System.out.println("Size: " + this.getListOfAddresses().size());

System.out.println("Element at zeroth position in list: " + this.getListOfAddresses().get(0));

System.out.println("Element at nth position in list: " + this.getListOfAddresses().get(this.getListOfAddresses().size()-1));

writeTheListOnPdf();

}

private void writeTheListOnPdf() {

try {

Document document = new Document();

PdfWriter.getInstance(document, new FileOutputStream(FILE));

document.open();

addMetaData(document);

//addTitlePage(document);

addContent(document);

document.close();

} catch (Exception e) {

e.printStackTrace();

}

}

private void addContent(Document document) throws DocumentException{

PdfPTable table = makeTable();

for (int i = 0; i < this.getListOfAddresses().size() ; i++) {

PdfPCell cell = makeCell();

cell.addElement(new Phrase(this.getListOfAddresses().get(i)));

table.addCell(cell);

}

/* we have three columns in the table. If the number of addresses is not exactly equal to the number of

* cells created then the pdf file is corrupt and the program throws error. So we have to add some extra cells

* to complete a row. */

calculateAndAddExtraCells(table);

document.add(table);

}

private void calculateAndAddExtraCells(PdfPTable table) {

int numOfAddresses = this.getListOfAddresses().size();

int numOfExtraCells = this.getListOfAddresses().size()%3;

int loopCounter = 0;

if (numOfExtraCells == 0)

loopCounter = 3;

else if (numOfExtraCells == 1)

loopCounter = 2;

else if (numOfExtraCells == 2)

loopCounter = 1;

for (int i = 1; i <= loopCounter ; i++) {

PdfPCell blankCell = this.makeCell();

blankCell.addElement(new Phrase("."));

table.addCell(blankCell);

}

}

private PdfPCell makeCell() {

PdfPCell cell = new PdfPCell();

cell.setPadding(4);

//cell.setNoWrap(true);

cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);

cell.setVerticalAlignment(PdfPCell.ALIGN_CENTER);

cell.setBorder(Rectangle.NO_BORDER);

return cell;

}

private PdfPTable makeTable() {

PdfPTable table = new PdfPTable(3);

table.setWidthPercentage(100);

table.setSplitRows(false);

return table;

}

private void addMetaData(Document document) {

document.addTitle("Address labels for the input pdf file");

document.addSubject("Address labels");

document.addKeywords("ebay, amazon, addresses, labels");

document.addAuthor("Ajmal Khan");

document.addCreator("Ajmal Khan");

}

public java.util.List getListOfAddresses() {

return listOfAddresses;

}

public void setListOfAddresses(java.util.List listOfAddresses) {

this.listOfAddresses = listOfAddresses;

}

}//writePdf ends here.

這是pom.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.swedishnow

ebayAddresses

1.0-SNAPSHOT

org.apache.maven.plugins

maven-jar-plugin

true

addressLabels.Driver

com.itextpdf

kernel

7.0.0

com.itextpdf

layout

7.0.0

org.slf4j

slf4j-log4j12

1.7.18

com.itextpdf

itext-xtra

5.5.4

com.itextpdf

itextpdf

5.5.9

我使用此視頻中推薦的方法在intellij Community 2018.1.5 Edition中創(chuàng)建可執(zhí)行jar。

總結(jié)

以上是生活随笔為你收集整理的pdf 中的java运行,java - 从pdf文件读取特定位置的itext在intellij中运行,并提供所需的输出,但是可执行jar抛出错误 - 堆栈内存溢出...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人h动漫精品一区二区器材 | 色哟哟国产精品色哟哟 | 久久嫩| 国产成人精品一区二区三 | 欧美一区二区三区视频在线 | 欧美黄页在线观看 | 欧美午夜性春猛交 | 亚洲黄色视屏 | 国产男女精品 | www.黄色在线观看 | 我要操av | 欧美xo影院 | 一区二区少妇 | 性一交一乱一伧国产女士spa | 黄色片子视频 | 疯狂伦交 | 成人在线免费看片 | 天啪| 寂寞午夜影院 | 精品成在人线av无码免费看 | 玖玖玖在线观看 | 99国产热| 亚洲成a人v欧美综合天堂麻豆 | 精品国产1区2区 | 日本一区二区三区四区视频 | 久久草国产| 欧美成年人视频 | 亚洲第一精品在线 | 欧美性猛交xxxx乱大交俱乐部 | 美女扒开让男人桶爽 | 欧美日韩你懂的 | 成人黄色短视频在线观看 | 日本五十路女优 | 在线观看视频毛片 | julia一区二区中文久久97 | 国产精品一区二区久久毛片 | 欧美日韩一区二区电影 | 久久精品这里只有精品 | 男插女在线观看 | 综合成人在线 | 青草视频网 | 欧美一区二区三区久久成人精品 | 国产91区| 欧美日韩视频一区二区三区 | 欧美精品一二三区 | 中文字幕在线视频免费 | 在线观看免费高清在线观看 | 欧美日韩亚洲系列 | 在线尤物 | 内谢少妇xxxxx8老少交视频 | 一级国产黄色片 | 激情插插插 | 欧美成在线观看 | 日本三级吃奶头添泬无码苍井空 | 亚洲日日夜夜 | 肥老熟妇伦子伦456视频 | 国产aⅴ激情无码久久久无码 | 国产精品福利一区二区 | 久久久免费网站 | 毛片无限看 | 国产理论在线观看 | 国产素人在线观看 | 97se在线| 一区二区国产精品 | 日本乱偷人妻中文字幕在线 | 欧美精品一区二区三区蜜臀 | 北条麻妃一区二区三区 | 成人在线一区二区 | 91精品国产高清一区二区三密臀 | 国产乱子视频 | 国产精品资源网 | 91免费版视频 | 精品乱码久久久久久中文字幕 | 国产亚洲精品久久 | av成人免费观看 | 欧洲亚洲自拍 | 无码人妻少妇伦在线电影 | 一本久道视频一本久道 | 亚洲高清毛片一区二区 | 最好看的2019年中文视频 | 人妻中文字幕一区二区三区 | 日韩精品一区二区三区在线视频 | 99热这里有精品 | 呦呦在线视频 | 国产a∨精品一区二区三区仙踪林 | 伦伦影院午夜理伦片 | 中文字幕在线播放视频 | 久久看看| 视频在线观看免费 | 日韩经典一区二区 | 顶级黑人搡bbw搡bbbb搡 | 二区三区在线视频 | 日本精品视频一区二区三区 | 亚洲精品免费观看 | 五月婷婷国产 | 国产毛片久久久久 | 亚洲成熟女性毛茸茸 | 日本免费一区二区三区视频 | 美国一级特黄 |