Jak utworzyć plik PDF za pomocą iText lub innej biblioteki na Androidzie?Jak utworzyć plik PDF za pomocą iText lub innej biblioteki na Androida?
Czy istnieje samouczek dotyczący iText dla Androida?
Dzięki
Jak utworzyć plik PDF za pomocą iText lub innej biblioteki na Androidzie?Jak utworzyć plik PDF za pomocą iText lub innej biblioteki na Androida?
Czy istnieje samouczek dotyczący iText dla Androida?
Dzięki
Użyłem iText w aplikacji Java Swing - to działa dobrze, aby utworzyć kilka podstawowych plików PDF. Kod jest mniej więcej taki:
@Override public void buildPDF(List<Folder> folders) {
Document document = new Document();
String fname = "";
boolean open = false;
try {
// step 2:
// we create a writer that listens to the document
// and directs a PDF-stream to a file
fname = filename(getName()) + "-" + filename(getDataset().getName()) + ".pdf";
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream(fname));
for (int i = 0; i < folders.size(); i++) {
// grab the folder
LIFolder f = (LIFolder) folders.get(i);
if (f == null) continue;
open = true;
break;
}
// we have no valid folders
if (folders.size() > 0 && !open) {
// they selected an empty row
javax.swing.JOptionPane.showMessageDialog(null, BUNDLE.getString("report-none-selected"),
BUNDLE.getString("report-none-selected-title"),
javax.swing.JOptionPane.ERROR_MESSAGE);
return;
}
if (folders.size() == 0) {
// get all folders from dataset
folders = FolderFinder.findAll(getSession(), getDataset());
}
open = false;
for (int i = 0; i < folders.size(); i++) {
// grab the folder
LIFolder f = (LIFolder) folders.get(i);
if (f == null) continue;
if (!open) {
open = true;
document.open();
}
Paragraph p = new Paragraph(BUNDLE.getString("report-heading-summary-main"), getPageHeadingFont());
p.setAlignment("center");
document.add(p);
p = new Paragraph(BUNDLE.getString("report-heading-summary-main-sub"), this.pageHeadingFont1);
p.setAlignment("center");
document.add(p);
blankLine(document);
drawLine(writer);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Primary Statement Details
///////////////////////////////////////////////////////////////////////////////////////////////////
p = new Paragraph("Primary Statement Details", this.pageHeadingFont2);
p.setAlignment("center");
document.add(p);
blankLine(document);
PdfPTable table = new PdfPTable(4);
table.addCell(new BorderlessCell(new Paragraph("Dataset:", getFieldHeadingFont())));
BorderlessCell cell = new BorderlessCell(new Paragraph(getDataset().getName(), getTextFont()));
cell.setColspan(3);
table.addCell(cell);
table.addCell(new BorderlessCell(new Paragraph("Data Entry Clerk:", getFieldHeadingFont())));
cell = new BorderlessCell(new Paragraph(
(f.getDataEntryClerk() != null ? f.getDataEntryClerk().toDescriptionPathString() : emptyIfNull(null)),
getTextFont()));
cell.setColspan(3);
table.addCell(cell);
table.setWidthPercentage(100);
cell = new BorderlessCell(new Paragraph("Statement Number:", getFieldHeadingFont()));
table.addCell(cell);
table.addCell(new BorderlessCell(new Paragraph(f.getReferenceId(), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Statement Date:", getFieldHeadingFont())));
String strDate = "";
java.util.Date date = f.getStatementDate();
if (date != null) {
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
strDate = formatter.format(date);
}
table.addCell(new BorderlessCell(new Paragraph(strDate, getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Statement Location:", getFieldHeadingFont())));
cell = new BorderlessCell(new Paragraph(emptyIfNull(f.getTakerLocation()), getTextFont()));
cell.setColspan(3);
table.addCell(cell);
table.addCell(new BorderlessCell(new Paragraph("Statement keywords:", getFieldHeadingFont())));
cell = new BorderlessCell(new Paragraph(emptyIfNull(f.getKeywords()), getTextFont()));
cell.setColspan(3);
table.addCell(cell);
document.add(table);
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
// Statement Giver's Details
///////////////////////////////////////////////////////////////////////////////////////////////////
LIPerson p01 = null;
Set<Actor> actors = f.getActors();
Iterator iter = actors.iterator();
while (iter.hasNext()) {
Actor actor = (Actor) iter.next();
if (actor instanceof LIPerson) {
LIPerson person = (LIPerson) actor;
if (person.getReferenceId().toString().equalsIgnoreCase("p01")) {
p01 = person;
break;
}
}
}
blankLine(document);
drawLine(writer);
p = new Paragraph(new Chunk("Statement Giver's Details", this.pageHeadingFont2));
p.setAlignment("center");
document.add(p);
java.util.ArrayList giver = new java.util.ArrayList();
if (p01 != null)
giver.add(p01);
table = new PdfPTable(2);
table.setWidthPercentage(100f);
table.addCell(new BorderlessCell(new Paragraph("Name of Statement Giver:", getFieldHeadingFont())));
table.addCell(new BorderlessCell(new Paragraph(ActorsToString(giver), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Sex:", getFieldHeadingFont())));
if (p01 == null)
table.addCell(new BorderlessCell(new Paragraph(emptyIfNull("TBD"), getTextFont())));
else
table.addCell(new BorderlessCell(new Paragraph((p01.getSex() != null ? p01.getSex().toString() : ""), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Tribe:", getFieldHeadingFont())));
if (p01 == null)
table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(null), getTextFont())));
else
table.addCell(new BorderlessCell(
new Paragraph((p01.getEthnicityOrTribe() != null ? p01.getEthnicityOrTribe().toDescriptionPathString() : emptyIfNull(null)),
getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Nationality:", getFieldHeadingFont())));
if (p01 == null)
table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(null), getTextFont())));
else
table.addCell(new BorderlessCell(
new Paragraph((p01.getNationality() != null ? p01.getNationality().toDescriptionPathString() : emptyIfNull(null)),
getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Marital Status:", getFieldHeadingFont())));
table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getMaritalStatus()), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Education Level:", getFieldHeadingFont())));
table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getEducationLevel()), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("County of Origin:", getFieldHeadingFont())));
table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getCountyOfOrigin()), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Mother's Name:", getFieldHeadingFont())));
table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getMothersName()), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Father's Name:", getFieldHeadingFont())));
table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getFathersName()), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("# of Dependents:", getFieldHeadingFont())));
table.addCell(new BorderlessCell(new Paragraph(Integer.toString(f.getNumDependents()), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Phone Number:", getFieldHeadingFont())));
table.addCell(new BorderlessCell(new Paragraph(emptyIfNull(f.getPhoneNumber()), getTextFont())));
document.add(table);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Summary
///////////////////////////////////////////////////////////////////////////////////////////////////
blankLine(document);
drawLine(writer);
p = new Paragraph(new Chunk("Summary", this.pageHeadingFont2));
p.setAlignment("center");
document.add(p);
p = new Paragraph(new Chunk(emptyIfNull(f.getSourceSummary()), getTextFont()));
document.add(p);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Incident(s)
///////////////////////////////////////////////////////////////////////////////////////////////////
Set<Act> acts = f.getActs();
if (acts.size() > 0) {
// sort them by id
Hashtable map = new Hashtable();
Iterator it = acts.iterator();
String[] ids = new String[acts.size()];
int x = 0;
while (it.hasNext()) {
LIAct act = (LIAct) it.next();
String index = Integer.toString(act.getId());
map.put(index, act);
ids[x++] = index;
}
java.util.Arrays.sort(ids);
blankLine(document);
drawLine(writer);
p = new Paragraph(new Chunk("Act(s)", this.pageHeadingFont2));
p.setAlignment("center");
document.add(p);
blankLine(document);
table = new PdfPTable(4);
table.setWidthPercentage(100);
for (int y = 0; y < ids.length; y++) {
LIAct act = (LIAct) map.get(ids[y]);
table.addCell(new BorderlessCell(new Paragraph("Act ID:", getFieldHeadingFont())));
cell = new BorderlessCell(new Paragraph(act.getReferenceId(), getTextFont()));
cell.setColspan(3);
table.addCell(cell);
table.addCell(new BorderlessCell(new Paragraph("Start Date:", getFieldHeadingFont())));
table.addCell(new BorderlessCell(new Paragraph((act.getWhen() != null ? act.getWhen().toString():""), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("End Date:", getFieldHeadingFont())));
table.addCell(new BorderlessCell(new Paragraph((act.getUntil() != null?act.getUntil().toString():""), getTextFont())));
table.addCell(new BorderlessCell(new Paragraph("Location of act:", getFieldHeadingFont())));
p = new Paragraph(emptyIfNull(act.getWhere().toString()), getTextFont());
p.setAlignment(Paragraph.ALIGN_LEFT);
cell = new BorderlessCell(p);
cell.setColspan(3);
table.addCell(cell);
table.addCell(new BorderlessCell(new Paragraph("Precise Location:", getFieldHeadingFont())));
p = new Paragraph(emptyIfNull(act.getPreciseLocation()), getTextFont());
p.setAlignment(Paragraph.ALIGN_LEFT);
cell = new BorderlessCell(p);
cell.setColspan(3);
table.addCell(cell);
table.addCell(new BorderlessCell(new Paragraph("Violation:", getFieldHeadingFont())));
p = new Paragraph(emptyIfNull(act.getViolation().toDescriptionPathString()), getTextFont());
p.setAlignment(Paragraph.ALIGN_LEFT);
cell = new BorderlessCell(p);
cell.setColspan(3);
table.addCell(cell);
table.addCell(new BorderlessCell(new Paragraph("Description:", getFieldHeadingFont())));
p = new Paragraph(emptyIfNull(act.getDescriptionLocation()), getTextFont());
p.setAlignment(Paragraph.ALIGN_LEFT);
cell = new BorderlessCell(p);
cell.setColspan(3);
table.addCell(cell);
// add empty cell
cell = new BorderlessCell(new Paragraph(""));
cell.setColspan(4);
table.addCell(cell);
cell = new BorderlessCell(new Paragraph(""));
cell.setColspan(4);
table.addCell(cell);
}
document.add(table);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
// Victims
/////////////////////////////////////////////////////////////////////////////////////////////////
List<Actor> victims = this.getAllVictims(f);
if (!victims.isEmpty()) {
blankLine(document);
drawLine(writer);
String strVictims = ActorsToString(victims);
p = new Paragraph(new Chunk("Victim(s)", this.pageHeadingFont2));
p.setAlignment("center");
document.add(p);
p = new Paragraph(new Chunk("Name(s) of Victim(s): ", getFieldHeadingFont()));
p.add(new Chunk(strVictims, getTextFont()));
document.add(p);
String gender = ActorsToGender(victims);
p = new Paragraph(new Chunk("Gender: ", getFieldHeadingFont()));
p.add(new Chunk(gender, getTextFont()));
document.add(p);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
// Perps
/////////////////////////////////////////////////////////////////////////////////////////////////
List<Actor> perps = this.getAllPerpetrators(f);
if (!perps.isEmpty()) {
blankLine(document);
drawLine(writer);
p = new Paragraph(new Chunk("Perpetrator(s)", this.pageHeadingFont2));
p.setAlignment("center");
document.add(p);
String strPerps = ActorsToString(perps);
p = new Paragraph(new Chunk("Name(s) of alleged perpetrator(s): ", getFieldHeadingFont()));
p.add(new Chunk(strPerps, getTextFont()));
document.add(p);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
document.newPage();
}
} catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (java.io.IOException ioe) {
System.err.println(ioe.getMessage());
}
// step 5: we close the document
if (open) {
document.close();
if (!fname.equals("")) {
// launch it
Reports.LaunchPDF(fname);
}
}
}
Jeśli potrzebujesz więcej informacji, daj mi znać. Powodzenia!
Cześć Tarrant, chcę utworzyć plik PDF w aplikacji Android, nie w java huśtawka. – Khushwant
Korzystam z prostego kodu, aby utworzyć plik pdf na mojej karcie SD za pomocą biblioteki iText pdf, ale daje on następujące błędy. ** 1 **. Nie można odnaleźć klasy 'com.itextpdf.text.pdf.PdfGraphics2D', odwołuje się od metody com.itextpdf.text.pdf.PdfContentByte.createGraphics ** 2 **. Nie można odnaleźć klasa "com.itextpdf.text.pdf.PdfPrinterGraphics2D", do której odwołuje się metoda com.itextpdf.text.pdf.PdfContentByte.createPrinterGraphics ** 3. ERROR/dalvikvm (309) **: Nie można znaleźć klasy "org.bouncycastle.cms.CMSEnvelopedData", do której odwołuje się metoda com.itextpdf.text.pdf.PdfReader.readDecryptedDocObj – Khushwant
Zakładam, że dodałeś bibliotekę do swojej biblioteki projekt. Myślę, że możesz potrzebować uruchomić dx (w android sdk) w pliku jar, chyba że używasz Eclipse? Dx służy do przekształcania plików klas w słoikach innych niż android w pliki-deks, dzięki czemu można je znaleźć/użyć na urządzeniu. – tarrant
Możesz użyć iText do tworzenia plików PDF. Użyj najnowszej wersji (5.1.3) i dołącz tylko plik itextpdf-5.1.3.jar do ścieżki budowania. Możesz użyć czegoś takiego, aby wykonać tworzenie pdf.
Document document = new Document();
file = Environment.getExternalStorageDirectory().getPath() + "/Hello.pdf"
PdfWriter.getInstance(document,new FileOutputStream(file));
document.open();
Paragraph p = new Paragraph("Hello PDF");
document.add(p);
document.close();
Nie zapomnij również użyć uprawnienia do zapisu w pamięci zewnętrznej w pliku manifest.xml.
pobieranie błędu tutaj ..... PdfWriter.getInstance (document, new FileOutputStream (file)); powiedz mi o możliwym rozwiązaniu – GvSharma
Ludzie tutaj mogą ci pomóc lepiej, jeśli opublikujesz błąd. A zaniedbanie tylko dlatego, że rozwiązanie nie działa dla ciebie, nie jest drogą do zrobienia. Poświęć trochę czasu na poznanie kodeksu postępowania, zanim coś napiszesz. Nikt nie przeprowadzi cię przez rozwiązanie bez twojej starannej debugowania. – arTsmarT
To mój kodowanie próbki do tworzenia pliku PDF z tekstem i obrazem zawartości przy użyciu biblioteki iText i do przechowywania pliku pdf w zewnętrznym miejsce przechowywania. Jedyne, co musisz zrobić, to pobrać bibliotekę itext i dodać ją do swojego projektu.
private void createPdf() {
// TODO Auto-generated method stub
com.itextpdf.text.Document document = new com.itextpdf.text.Document();
try {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/vindroid";
File dir = new File(path);
if(!dir.exists())
dir.mkdirs();
Log.d("PDFCreator", "PDF Path: " + path);
File file = new File(dir, "sample.pdf");
FileOutputStream fOut = new FileOutputStream(file);
PdfWriter.getInstance(document, fOut);
//open the document
document.open();
Paragraph p1 = new Paragraph("Sample PDF CREATION USING IText");
Font paraFont= new Font(Font.FontFamily.COURIER);
p1.setAlignment(Paragraph.ALIGN_CENTER);
p1.setFont(paraFont);
//add paragraph to document
document.add(p1);
Paragraph p2 = new Paragraph("This is an example of a simple paragraph");
Font paraFont2= new Font(Font.FontFamily.COURIER,14.0f,0, CMYKColor.GREEN);
p2.setAlignment(Paragraph.ALIGN_CENTER);
p2.setFont(paraFont2);
document.add(p2);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeResource(getBaseContext().getResources(), R.drawable.ic_launcher);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100 , stream);
Image myImg = Image.getInstance(stream.toByteArray());
myImg.setAlignment(Image.MIDDLE);
//add image to document
document.add(myImg);
} catch (DocumentException de) {
Log.e("PDFCreator", "DocumentException:" + de);
} catch (IOException e) {
Log.e("PDFCreator", "ioException:" + e);
}
finally
{
document.close();
}
}
package com.cete.androidexamples.dynamicpdf.helloworld;
import com.cete.dynamicpdf.*;
import com.cete.dynamicpdf.pageelements.Label;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Toast;
public class DynamicPDFHelloWorld extends Activity {
private static String FILE = Environment.getExternalStorageDirectory()
+ "/HelloWorld.pdf";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Create a document and set it's properties
Document objDocument = new Document();
objDocument.setCreator("DynamicPDFHelloWorld.java");
objDocument.setAuthor("Your Name");
objDocument.setTitle("Hello World");
// Create a page to add to the document
Page objPage = new Page(PageSize.LETTER, PageOrientation.PORTRAIT,
54.0f);
// Create a Label to add to the page
String strText = "Hello World...\nFrom DynamicPDF™ Generator "
+ "for Java\nDynamicPDF.com";
Label objLabel = new Label(strText, 0, 0, 504, 100,
Font.getHelvetica(), 18, TextAlign.CENTER);
// Add label to page
objPage.getElements().add(objLabel);
// Add page to document
objDocument.getPages().add(objPage);
try {
// Outputs the document to file
objDocument.draw(FILE);
Toast.makeText(this, "File has been written to :" + FILE,
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(this,
"Error, unable to write to file\n" + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
}
dodać DynamicPDF do plików libs można pobr go z link
To proste, na przykład
Here Kodeks moim reporsitory
gradle.build
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.madgag:scpkix-jdk15on:1.47.0.1'
compile 'com.itextpdf:itextpdf:5.0.6'
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.hackro.itext.MainActivity">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/btnwrite"
android:text="PDF"
android:onClick="GeneratePDF"
/>
</RelativeLayout>
MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.itextpdf.text.pdf.BaseFont;
import java.io.File;
public class MainActivity extends Activity {
private static final String LOG_TAG = "GeneratePDF";
private BaseFont bfBold;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void GeneratePDF(View view)
{
// TODO Auto-generated method stub
String filename = "david";
String filecontent = "Contenido";
Metodos fop = new Metodos();
if (fop.write(filename, filecontent)) {
Toast.makeText(getApplicationContext(),
filename + ".pdf created", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(getApplicationContext(), "I/O error",
Toast.LENGTH_SHORT).show();
}
}
}
Metodos.java
import android.util.Log;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Created by hackro on 24/11/15.
*/
public class Metodos {
public Boolean write(String fname, String fcontent) {
try {
String fpath = "/sdcard/" + fname + ".pdf";
File file = new File(fpath);
if (!file.exists()) {
file.createNewFile();
}
Font bfBold12 = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD, new BaseColor(0, 0, 0));
Font bf12 = new Font(Font.FontFamily.TIMES_ROMAN, 12);
Document document = new Document();
PdfWriter.getInstance(document,
new FileOutputStream(file.getAbsoluteFile()));
document.open();
document.add(new Paragraph("Sigueme en Twitter!"));
document.add(new Paragraph("@DavidHackro"));
document.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}}
Wynik
Powodzenia
iTextpdf v5.0.6 jest wymieniony jako zależność. Mam z tym dwie problemy. 1. 5.0.6 jest niesamowicie stary. Trzymaj się nowszych wersji dla nowych aplikacji. 2. Używasz iText Java, a nie iTextG (port Android). Port Androida ma kilka drobnych modyfikacji. Aby wymienić tylko kilka: wykluczyć użycie interfejsu API, który nie znajduje się w interfejsie API systemu Android (java.awt) i zapobiegać zderzaniu przestrzeni nazw (BouncyCastle). –
tak, buduję drugi przykład używając iTextG;) –
Z czego tworzysz plik PDF? Nie jestem zaznajomiony z "iText". – Phil
Nie, chcę utworzyć plik PDF w aplikacji Android za pomocą tekstu i obrazów. – Khushwant