Skip to main content

PdfPoster - a simple fix for Windows

I have tried a couple of times over the last 3 months to use PdfPoster on some Erwin documents. Unfortunately, I am using Windows XP on my work PC. It was clearly documented that I needed to install PyPdf 1.11 or higher, so I did easy_setup to install 1.12. Recently, I tried "C:\test>pdfposter -vvv -s 2.0 SCHEDULING.pdf scheduling_2x.pdf" ... and received a nice traceback (see below). This led me on a wild goose chase, under the assumption that my PyPDF library was not installed correctly. After a while, I decided to start python in immediate mode and just exercise PyPdf. It worked fine, but I noticed that the example opened a file using "rb" mode (read only, binary). So, I opened pdfposter/__init__.py under my site library directory, scrolled down to the bottom and changed the 3rd line of "def main" from "inpdf = PdfFileReader(open(infilename))" to "inpdf = PdfFileReader(open(infilename, "rb"))". Problem solved! So if you ever have problem with a python application, where it works under Linux but not under WinXP, try opening files in binary mode.


Mediasize : 1x1 a4
595.00 842.00 dots
Postersize: 1x1 a4
595.00 842.00 dots
---- processing page 1 -----
input dimensions: 612.00 792.00 (trimbox of input page)
output dimensions: 595.00 842.00 (poster size)
Calculated page scaling factor: 0.972222
output dimensions: 595.00 770.00 (calculated)
Pages w/o rotation 1 x 1
Pages w/ rotation 1 x 2
Decided for rotation: no
Deciding for 1 columns and 1 rows of portrait pages.
Traceback (most recent call last):
File "C:\Python25\Scripts\pdfposter-script.py", line 8, in
load_entry_point('pdftools.pdfposter==0.4.5', 'console_scripts', 'pdfposter'
)()
File "C:\Python25\lib\site-packages\pdftools\pdfposter\cmd.py", line 119, in r
un
main(opts, *args)
File "C:\Python25\lib\site-packages\pdftools\pdfposter\__init__.py", line 298,
in main
posterize(outpdf, page, opts.media_size, opts.poster_size, opts.scale)
File "C:\Python25\lib\site-packages\pdftools\pdfposter\__init__.py", line 251,
in posterize
_scale_pdf_page(page, scale)
File "C:\Python25\lib\site-packages\pdftools\pdfposter\__init__.py", line 235,
in _scale_pdf_page
content = ContentStream(page["/Contents"].getObject(), page.pdf)
File "c:\docume~1\rtate\locals~1\temp\easy_install-gpolew\pyPdf-1.12-py2.5-win
32.egg.tmp\pyPdf\pdf.py", line 1114, in __init__
File "c:\docume~1\rtate\locals~1\temp\easy_install-gpolew\pyPdf-1.12-py2.5-win
32.egg.tmp\pyPdf\generic.py", line 165, in getObject
File "c:\docume~1\rtate\locals~1\temp\easy_install-gpolew\pyPdf-1.12-py2.5-win
32.egg.tmp\pyPdf\pdf.py", line 549, in getObject
File "c:\docume~1\rtate\locals~1\temp\easy_install-gpolew\pyPdf-1.12-py2.5-win
32.egg.tmp\pyPdf\generic.py", line 67, in readObject
File "c:\docume~1\rtate\locals~1\temp\easy_install-gpolew\pyPdf-1.12-py2.5-win
32.egg.tmp\pyPdf\generic.py", line 539, in readFromStream
File "c:\docume~1\rtate\locals~1\temp\easy_install-gpolew\pyPdf-1.12-py2.5-win
32.egg.tmp\pyPdf\pdf.py", line 544, in getObject
KeyError: 0

Comments

Popular posts from this blog

Castle ActiveRecord with DetachedCriteria

My current development environment is Visual Studio Express C# Edition (read that as free ), Castle ActiveRecord's latest svn trunk(usually within a few days), and NHibernate svn trunk. As of NHibernate version 1.2.0, there is a very cool new class out there ... DetachedCriteria. This class lets you set all of your Castle relational attributes like BelongsTo, HasMany, etc. as lazy fetch, and over-ride this for searches, reports, or anytime you know ahead of time that you will be touching the related classes by calling detachedCriteria.SetFetchMode(..., FetchEnum.Eager). As a good netizen, I have tried to contribute to NHibernate and Castle ActiveRecord even if only in the smallest of ways . Oh yeah, I tried mapping to a SQL VIEW, and it worked GREAT! I received a comment after my last post, indicating that there is a better way, and I am sure of it, but the view guaranteed that I only have one database request for my dataset. NHibernate was wanting to re-fetch my missing as...

How does Rails scaffolding select HTML input tags?

Recently, a reader saw my fix for SQL Server booleans, and asked me a followup question: why does Rails display a yes/no selection instead of a checkbox? The short answer is look in {RUBY_HOME} /lib/ruby/gems/1.8 /gems/actionpack-1.10.2 /lib/action_view/helpers, but your path may vary depending on whether you are using gem, "edge rails", etc. Anyway, look in the file "active_record_helper.rb" for a method called "all_input_tags", and notice that it calls "default_input_block" if you don't supply an input_block. Now notice that "default_input_block" creates a label and calls "input(record, column.name)" which in turn calls "InstanceTag#to_tag" which finally looks at the datatype and maps boolean to a select tag. Perhaps a wiser Rails explorer can provide us with the rationale for this, but I guess we could add a MixIn for InstanceTag that redefines the to_tag() method, or just do a dirty and unmaintainable hack l...

Castle ActiveRecord calling a Stored Procedure

Update: I have contributed patch AR-156 that allows full integration of Insert, Update and Delete to ActiveRecord models . If you've been reading my blog lately, you know that I have been seriously testing the Castle ActiveRecord framework out. I really love it, but I have an existing Microsoft SQL Server database with many stored procedures in it. I have tested the ActiveRecord model out, and I am sure that I will learn enough to be able to use it for standard CRUD (create, read, update, delete aka. insert, select, update, delete) functionality. BUT ... If I really want to integrate with my existing billing procedures, etc, I will have to be able to call stored procedures. I have taken two approaches ... write the ARHelper.ExecuteNonQuery(targetType, dmlString) method that gets a connection for the supplied type, executes dmlString, and closes it. write the ARHelper.RegisterCustomMapping(targetType, xmlString) method that allows me to add mappings that refer to my auto-gener...