Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/HendrixString/Android-PdfMyXml

Convert android XML layouts into PDF document, works on all versions of Android.
https://github.com/HendrixString/Android-PdfMyXml

android android-pdfmyxml pdf pdf-generation

Last synced: 11 days ago
JSON representation

Convert android XML layouts into PDF document, works on all versions of Android.

Lists

README

        

# Android-PdfMyXml [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-Android--PdfMyXml-green.svg?style=flat)](https://android-arsenal.com/details/1/2297) [![Jitpack](https://jitpack.io/v/HendrixString/Android-PdfMyXml.svg)](https://jitpack.io/#HendrixString/Android-PdfMyXml)
convert your android `XML` layouts into PDF document, works on all versions of Android.

### Dependencies
* [`pdfjet`](https://github.com/soster/pdfjet)

## How to use

Option 1: Simply fork or download the project, you can also download and create `.aar` file yourself.

Option 2: Jitpack

Add Jitpack in your root build.gradle at the end of repositories:
```groovy
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
```

Add to your dependencies:

```groovy
dependencies {
compile 'com.github.HendrixString:Android-PdfMyXml:{Tag}' // the latest version is "v1.0.1"
}
```

## Notable features
* should work on all Android versions
* completely scalable
* supports bitmap re usage.
* production proved code. Used in a commercial project.

### Instructions
#### 1. create XML layouts
First create XML layouts. give it dimensions in **pixels** (and for all it's sub views) and proportions according landscape or portrait according to ratio **1:1.41**.


page1.xml
```java

```

you can create as many as pages/templates as you need.

#### 2. Implement a View renderer
implement your View renderer by extending `AbstractViewRenderer` or by anonymously instantiating it and injecting the layout id. the initView(View view) will supply you an inflated View automatically. There are other options but I wont cover it now.
```java
AbstractViewRenderer page = new AbstractViewRenderer(context, R.layout.page1) {
private String _text;

public void setText(String text) {
_text = text;
}

@Override
protected void initView(View view) {
TextView tv_hello = (TextView)view.findViewById(R.id.tv_hello);
tv_hello.setText(_text);
}
};

// you can reuse the bitmap if you want
page.setReuseBitmap(true);

```

#### 3. Build the PDF document
Use `PdfDocument` or `PdfDocument.Builder` to add pages and render and run it all at background with progress bar.
```java
PdfDocument doc = new PdfDocument(ctx);

// add as many pages as you have
doc.addPage(page);

doc.setRenderWidth(2115);
doc.setRenderHeight(1500);
doc.setOrientation(PdfDocument.A4_MODE.LANDSCAPE);
doc.setProgressTitle(R.string.gen_please_wait);
doc.setProgressMessage(R.string.gen_pdf_file);
doc.setFileName("test");
doc.setSaveDirectory(_ctx.getExternalFilesDir(null));
doc.setInflateOnMainThread(false);
doc.setListener(new PdfDocument.Callback() {
@Override
public void onComplete(File file) {
Log.i(PdfDocument.TAG_PDF_MY_XML, "Complete");
}

@Override
public void onError(Exception e) {
Log.i(PdfDocument.TAG_PDF_MY_XML, "Error");
}
});

doc.createPdf(ctx);

```

or use `PdfDocument.Builder`
```java
new PdfDocument.Builder(ctx).addPage(page).orientation(PdfDocument.A4_MODE.LANDSCAPE)
.progressMessage(R.string.gen_pdf_file).progressTitle(R.string.gen_please_wait)
.renderWidth(2115).renderHeight(1500)
.saveDirectory(_ctx.getExternalFilesDir(null));
.filename("test")
.listener(new PdfDocument.Callback() {
@Override
public void onComplete(File file) {
Log.i(PdfDocument.TAG_PDF_MY_XML, "Complete");
}

@Override
public void onError(Exception e) {
Log.i(PdfDocument.TAG_PDF_MY_XML, "Error");
}
}).create().createPdf(this);
```

### Additional Contributors
* [`Sébastiaan`](https://github.com/se-bastiaan)

### License
If you like it -> star or share it with others

```
Copyright (C) 2016 Tomer Shalev (https://github.com/HendrixString)

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see .
```

### Contact Author
* [[email protected]]([email protected])
* [Google+ TomershalevMan](https://plus.google.com/+TomershalevMan/about)
* [Facebook - HendrixString](https://www.facebook.com/HendrixString)