PDF::API2 image_png - image

I have a problem with pdf::api2 I need to edit an existing pdf and put in some images. The problem is that for inserting 4 images it takes around 20 seconds per image. So the whole process goes up to minute and a half. Is there some magic i can do to speed up the process? The images are 1920 × 1080 and need to stay that size, because i need quality pdf-s... So without further ado, here is the code:
#!/usr/bin/perl
use PDF::API2;
print "start ".(localtime)."\n";
$pdf = PDF::API2->open("sample.pdf");
$page = $pdf->openpage(1);
$page->mediabox(840,600)
$gfx=$page->gfx;
print "first image ".(localtime)."\n";
$first=$pdf->image_png("first.png");
print "inserting first image ".(localtime)."\n";
$gfx->image($first,134,106,510,281);
print "saving ".(localtime)." \n";
$pdf->saveas('new_file.pdf');
print "done ".(localtime)." \n";
The output i get:
start Mon Jun 3 10:46:31 2013
first image Mon Jun 3 10:46:31 2013
inserting first image Mon Jun 3 10:46:53 2013
saving Mon Jun 3 10:46:53 2013
done Mon Jun 3 10:46:57 2013
So the most time consuming process is image_png which takes 22 seconds in this example... Any help would be appreciated. Thanks
Update: if i use the same image converted to JPEG, it works flawlessly, under a second. The problem is i need the transparency of the PNG files

The documentation for PDF::API2 explicitly says that operations on transparent .png files are slow, and recommends installing PDF::API2::XS or (IIRC) Image::PNG::libpng to speed it up.

Related

Why is a different timezone being printed with ParseInLocation?

I'm trying to parse a string into time with a user-specific timezone location -
// error handling skipped for brevity
loc, _ := time.LoadLocation("Asia/Kolkata")
now, _ := time.ParseInLocation("15:04", "10:10", loc)
fmt.Println("Location : ", loc, " Time : ", now)
The output I get on my system is - Location : Asia/Kolkata Time : 0000-01-01 10:10:00 +0553 HMT
Where did this HMT time zone come from?
If instead of parsing the time I use now := time.Now().In(loc), the timezone printed is correct - IST. Am I doing something wrong with timezone parsng or is my system timezone database faulty?
This may be a relic of the fact that your year for now is 0000, while time.Now() returns the current time. Timezones are weird, and certain locations haven't always used the same timezone. This is an excerpt from the IANA Time Zone Database:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
5:53:20 - HMT 1870 # Howrah Mean Time?
5:21:10 - MMT 1906 Jan 1 # Madras local time
5:30 - IST 1941 Oct
5:30 1:00 +0630 1942 May 15
5:30 - IST 1942 Sep
5:30 1:00 +0630 1945 Oct 15
5:30 - IST
If I am interpreting this correctly, it seems HMT was used from 1854 until 1870—I'm not exactly sure why this would cause it to be used for year 0000, which would seem to fall under LMT, but it's possible the Go database is slightly different (or it's possible that I'm misinterpreting the database). If you're concerned about the correct timezone being used for historical dates (like 0000) I'm not sure I can give a great answer, however for anything recent IST should be correctly used.

Strange arithmetic issue in CMD

I've been experiencing a very strange issue in CMD and I can't for the life of me figure out why it's doing this!
I'm performing arithmetic on some dates and subtracting one from the month and it was going just fine until I got to the numbers 8 & 9! Because I'm dealing with dates, I'm adding a preceding 0 for any value less than 10, which makes 8 become 08.
I input the following into the cmd (keep in mind that for values 01, 02, 03, 04, 05, 06, 07 & 10, the below code will work just fine):
set z=08
set /a z-1
somehow this code returns an answer of -1 instead of the expected 7!
yet if I do:
set z=8
set /a z-1
This code returns 7 which is what I would expect.
What on earth is going on here?

Grok for jrockit gc logging

I have the below jrockit gc log which I want to index using grok to find pattern.
[memory ][Thu Feb 4 14:23:21 2016][01888] [OC#1119] 199979.563-199981.320: OC 1875383KB->1445390KB (2097152KB), 1.757 s, sum of pauses 1731.731 ms, longest pause 1731.731 ms.
The Information I want is
date : Thu Feb 4 14:23:21 2016
CurrentHeap: 1875383
Heap: 1445390
TotalHeap: 2097152
SumofPause: 1731.731
LongestPause: 1731.731
I starte writing something like this..
[memory ][%{DATA:wls_timestamp}][%{DATA:discard1}][%{DATA:discard2}]
But couldn't go any further, can someone guide me how to extract specific information in a data like this.
Thanks
SR

Trying to convert time 19 digits

I am wondering what they formats are? Any advice would be much appreciated. This is used in the IBM application called Tealeaf
4682158116698062848 = 12:00:00 AM
4682162239866667008 = 12:01:00 AM
4682166363035271168 = 12:02:00 AM
4682405506814312448 = 01:00:00 AM
If I have to use an application to convert it, then the choice would be PHP
This looks like a Microsoft OLE Automation timestamp. Here is Microsoft's page about it. It represents the number of 24 hour periods since 1 Jan. 1900.
Looks like 64+ bit stamps. The most significant 28+bits are the seconds about 788 days after some epoch (Jan 1, 1970??) which would make it Feb 28, 1972 - or possible some other encoding based on seconds. The least significant 36-bits are all 0. I would expect the values could reach pow(2,72) or 22 decimal digits.

Strange behavior due to wx.Frame.SetTitle

In a wxPython application, which i am porting to Mac OSX, I set title of app frame every 500msec in update UI event, and due to that all the panels and windows are refreshed. That seems strange to me and almost halts my application which has many custom drawn controls and screens.
I wanted to know what could be the reason behind it, is it normal for MAC?
Here is a self-constrained script which replicates the scenario using timers. It keeps on printing "on paint" every 500ms because in timer I set title every 500ms.
import wx
app = wx.PySimpleApp()
frame = wx.Frame(None, title="BasePainter Test")
painter = wx.Panel(frame)
def onPaint(event):
dc = wx.PaintDC(painter)
print "onPaint"
painter.Bind(wx.EVT_PAINT, onPaint)
def loop():
frame.SetTitle(frame.GetTitle())
wx.CallLater(500, loop)
loop()
frame.Show(True)
app.SetTopWindow(frame)
app.MainLoop()
My system details:
>>> sys.version
'2.5 (r25:51918, Sep 19 2006, 08:49:13) \n[GCC 4.0.1 (Apple Computer, Inc. build 5341)]'
>>> wx.VERSION
(2, 8, 10, 1, '')
>>> os.uname()
('Darwin', 'agyeys-mac-mini.local', '9.8.0', 'Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386', 'i386')
Alas, I'm not sure of the specific issue. However, when you have a sample which demonstrates the problem but are stumped, I've always had great luck by emailing the wxpython-users mailing list and attaching the sample. You should get a response pretty quickly on if there is something you can do to fix it, or if not, that you should file a bug in the tracker.
I have had plenty of problems solved this way, and when I do have to file bugs, they are usually resolved quite speedily. Hope this helps!
It is a bug in wxPython (OSX-Carbon).
Filed a bug http://trac.wxwidgets.org/ticket/11920
Discussion:
http://groups.google.com/group/wxpython-users/browse_thread/thread/2430e0ef7ff1fb8/8f384968a42136d7

Resources