PDF PageDivide Release Free Online Version-Host on Google App Engine

If you meet the similar issues, and do not want to pay for it, please try Free PDF Page Divide Online service,

  • I have a few files with 100-150 scanned A3 images that I would like to split into A4 pages for printing
  • I have a 2-Up PDF, and I want to recovery it to the original size

it has the same function with my desktop version PDF PageDivide, but limit 10M upload and output.

btw, it is my 2nd Google App Engine application, also bases on modified version iText 2.1.7.

Be Sociable, Share!

PdfCrypt got the first donation

Thanks Richard Ramey for his donation, it is the first 10 dollar for the PdfCrypt.
BTW, If you do not want to download PdfCrypt, or you do not have windows system, but still want to remove the PDF Password(either user password or owner password) and stricts(print, copy and so on), please feel free to try my free Remove PDF Password Online solution hosted on Google App Engine(GAE/J), it bases on modified iText 2.1.7.

Be Sociable, Share!

How to Use Google App Engine UrlFetch API to download the files over 1M

Nick Johnson said,

Currently, API calls are limited to 1MB, but requests and responses are limited to 10M. If you want to permit larger files, you could split them up into chunks and store them in the datastore. The 30 second request limit applies only to the time your code spends processing the request, not time sent receiving the request or sending the response.
A large file API is on our roadmap, which will make handling large files from users much easier.

I offer the UrlFetch function in my PDF Password Remover Online application, but I do not want to let it only manipulate no more 1M PDF, after some study, I got the solution, let UrlFetch API download no more 1M data each time, but repeat many times until all data downloaded, of course, there still a limit, 30 second request limit.

public static byte[] download(String url) throws IOException, InterruptedException {

ArrayList al=new ArrayList();

HttpURLConnection httpConn = null;
int seg=1024*1000;
int startPosition=0;

try {
URL u = new URL(url);

for(;;)
{
int endPosition=startPosition+seg;

httpConn = (HttpURLConnection) u.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14");
httpConn.setRequestProperty("Range", "bytes=" + startPosition + "-"+endPosition);
httpConn.connect();

InputStream in = httpConn.getInputStream();
byte[] b=Util.toByteArray(in);//IOUtils.toByteArray(in);
al.add(b);
startPosition+=b.length;
if(b.length break;
}
ArrayList temp = new ArrayList();
for(byte[] b : al)
{
for (int i = 0; i temp.add(b[i]);
}
}
return Util.saveBytesArrayListTobytesArray(temp);
} finally {
httpConn.disconnect();
}
}

Be Sociable, Share!