| <<<Back 1 day (to 2011/12/11) | 2011/12/12 |
fUD | Hey folks | 01:34.33 |
| What does, "Warning: composite font characters dumped without decoding." really mean when using the ps2ascii command | 01:34.59 |
alexcher | fUD: It means that ps2ascii cannot convert character codes to ascii and writes them directly. | 02:42.32 |
| fUD: ps2ascii is now obsolete. Please use txtwrite device instead. | 02:43.18 |
fUD | alexcher: Oh thanks for the advice alexcher | 03:14.58 |
| alexcher: I don't seem to have that on Scientific linux 6 | 03:15.33 |
| alexcher: I'll look around and see what I can find. | 03:15.40 |
alexcher | fUD: txtwrite is not compiled by default on v. 9.04. | 03:26.17 |
| fUD: Current development version does compile it by default. | 03:26.56 |
| fUD: In either case you need to build gs from the sources. | 03:27.25 |
fUD | alexcher: yeah I'm a bit restricted (by systems team) as to what I can install.. | 03:27.38 |
alexcher | fUD: Can you compile a local copy? | 03:28.11 |
fUD | alexcher: btw, is that ps2ascii issue I'm having font related? | 03:28.12 |
| alexcher: Its a constand process of converting pdf's to ascii - its not a 1 off job sadly | 03:28.33 |
| s/constand/constant | 03:28.44 |
alexcher | fUD: ps2ascii doesn't support CID fonts. | 03:29.10 |
fUD | alexcher: it was working perfectly, until we upgraded... well so I thought, unless the format of the pdf changed from what we're being sent | 03:29.30 |
alexcher | fUD: ps2ascii has not changed recently. PDF files are increasingly using CID fonts. | 03:30.34 |
fUD | alexcher: ok I'll download a later postscript and compile it and see what I can do, I might have to force the systems team hand. | 03:31.28 |
alexcher | fUD: I can test your file and check whether txtwrite works. alex.cherepanov@artifex.com | 03:31.49 |
fUD | alexcher: thats cool, I'll give the compile a try. | 03:33.23 |
| alexcher: thanks for your help | 03:33.26 |
| alexcher: heh, its got an .. interesting build system | 03:55.27 |
| alexcher: oh it does use standard .gnutools, but not sure how to compile with txtwrite | 04:08.37 |
kens | Robin_Watts : (for the log) please don't reply to the customer asking about profiling, I know we can profile without VS on Windows, but I'm trying to put them off. | 09:49.38 |
Robin_Watts | I'm here. | 10:11.38 |
| I'm assuming that'll make sense when I read my email. | 10:11.52 |
kens | Probably :-) | 10:11.59 |
Robin_Watts | New version of Very Sleepy can profile both MSVC and gcc binaries on windows. | 10:12.12 |
kens | Probably. But I don't really want to ge involved in discussing profile results, and what pdfwrite is up to, with someone who has to have it explained to them how to do profiling of code.... | 10:13.00 |
Robin_Watts | Right. That customer. Fair enough. | 10:17.06 |
kens | :-) | 10:17.11 |
Robin_Watts | I thought that we as a company had a policy of not officially doing builds for people. | 10:35.52 |
kens | Indeed. | 10:36.01 |
Robin_Watts | (i.e. we might do it as a favour for companies, but we should always say "don't expect us to do this in future") | 10:36.17 |
| I've noticed us doing builds for companies with no such warning recently, which is going to come back to bite us in future, I reckon. | 10:37.00 |
kens | I'd prefer not to start, and also prefer not to enter teh discussion. If they want to do profiling, they should be capable of building from source. | 10:37.00 |
chrisl | You obviously weren't paying attention during the staff meeting | 10:37.17 |
Robin_Watts | chrisl: Was the policy changed? | 10:37.44 |
chrisl | There wasn't really a "change" just an acceptance that we do builds for people, and Marcos should be setup to do them | 10:38.17 |
| However, I think it's fair to say that wouldn't include profile builds...... | 10:39.00 |
Robin_Watts | Right. That's not my exactly my memory of what was said, but OK. | 10:39.25 |
| I remember something being said which made me think about having a web driven buildbot. | 10:39.48 |
| but then I thought about the need to include a different set of patches for every customer, and I abandoned that idea without mentioning it. | 10:40.23 |
chrisl | Well, Marcos gave three options: I keep doing the builds, Marcos gets setup to do them, or a buildbot - and yes, the random patches applied to the *commercial release* made that pretty much impossible. | 10:41.07 |
Robin_Watts | But yes. Profiles are tricky beasts to read at the best of times - if you're not capable of doing builds from source, you're not capable of making meaningful use of a profile build. | 10:41.12 |
| But to state that blankly to a customer risks offending them. | 10:41.38 |
kens | Yes, I was trying to be coy and avoid that. | 10:42.17 |
chrisl | I don't see what good it would do them anyway. If can't build GS, they're certainly not going to be able to address any hotspots they identified | 10:42.59 |
kens | I can see them asking all sorts of questions though... | 10:43.33 |
Robin_Watts | But they'll be able to pester us with all sorts of misunderstood justificiations! :) | 10:43.47 |
kens | But part of my analysis came from readin ghet PostScript file on Saturday. | 10:44.00 |
chrisl | The Postscript looks like pswrite output to me | 10:45.26 |
kens | I was thinking more of the 'Anotot pattern' | 10:45.44 |
| The clue to it being pswrite is the copyright header in the PS file. | 10:48.32 |
| It looks like it was actually epswrite, but that's basically pswrite. | 10:48.58 |
| Which is *going* to be slow. | 10:49.04 |
chrisl | Yes, especially with all those strange glyphs covering each page - what a bonkers file! | 10:49.50 |
kens | The 'Anoto pattern' ? looks like some kind of daft watermarking | 10:50.13 |
chrisl | Yep, very daft, and sloowwww....... | 10:52.00 |
kens | Indeed, it opens painfully slowly in Acrobat. The reason I suggest turning off 'DetectDuplicateImages' is because there are so many, and they are mostly different. | 10:52.36 |
chrisl | Does ps2write have an EPS "mode"? | 10:55.19 |
kens | Not yet. | 10:55.28 |
| Its (yet another) enhancement I'd like to do | 10:55.43 |
chrisl | I just wondered if this was part of their workflow, so ps2write would probably give better performance overall | 10:56.09 |
kens | It would, yes, but why not go directo to PDF ? | 10:56.29 |
| Hmm, looks like the problem with this file #692674 and FAPI is that its using charpath | 10:57.17 |
chrisl | Hm, that was odd..... | 10:58.54 |
kens | ? | 10:59.00 |
chrisl | freenode disappeared and then immediately came back again. | 10:59.23 |
kens | That is odd, it was OK here | 10:59.36 |
chrisl | Probably some network hiccup | 10:59.53 |
kens | OK it seems to be just the first bit of the text that was a charpath | 11:00.12 |
chrisl | From Ray's profile, three high up functions (Bezier_Up, Split_Cubic and Insert_Y_Turn) are only used during freetype rendering, and not during path generation. | 11:01.59 |
kens | I haven't got that far into it, I was looking to see under what conditions we entered FreeType at all. | 11:02.29 |
| So far every piece of text goes through charpath first, then a show. | 11:02.52 |
| Ah, its doing a stringwidth on every 'show' | 11:03.23 |
| I think that's the culprit | 11:03.46 |
chrisl | Oh, crap...... | 11:03.48 |
kens | "/ST{0 ne{1 8 4 roll 4 copy 12 -4 roll 8 3 roll}{0 6 1 roll}ifelse dup stringwidth pop 3 2 " | 11:04.03 |
| I guess the rendering thing is some difference in the way FT/FAPI works that's different to the old GS code. | 11:04.39 |
| This doesn't look like something I can address in pdfwrite. | 11:05.16 |
| Are we rendering the glyph in order to get the size ? | 11:05.48 |
chrisl | I had to make FAPI produce a bitmap on a stringwidth because usually/often/sometimes GS expects a glyph to be cached after a stringwidth | 11:06.39 |
kens | Well, that's why we have a difference with pdfwrite then. | 11:06.57 |
| The old code didn't render, the new code does. | 11:07.22 |
| I suppose if we knwe *why* the old code didn't render the glyph and could mimic it we'd be OK. | 11:07.43 |
chrisl | Sure, it sounds like my bug, though, so you might as well assign it to me | 11:08.04 |
kens | I can't really, its the horrible one which has gone on and on and dragged everyone in. | 11:08.29 |
| I'll make a new one for you. | 11:08.36 |
chrisl | I thought you already opened a new one specifically for this | 11:09.01 |
kens | I didn't think os, did I ? | 11:09.12 |
kens | goes to look | 11:09.20 |
| No can't find one. | 11:09.49 |
chrisl | I guess not - I thought you were going to specifically because the original bug had rambled on so much | 11:10.27 |
kens | Exactly, I'm doing a new one now | 11:10.42 |
chrisl | I'll try to have a preliminary look this afternoon. | 11:11.33 |
| bbiab | 11:11.45 |
kens | OK I'm writing it up properly just in case it gets forgotten about | 11:11.52 |
Robin_Watts | If I want to make gs read gs_init.ps from a disc file of my choosing, can I do that just by using a command line switch? | 11:58.47 |
| I'm sure I've done that before... | 11:58.52 |
kens | -I | 11:58.58 |
Robin_Watts | I've tried -I blah -I blah/Resource -I blah/Resource/Init and none have worked. | 11:59.27 |
kens | -I/.../Resource/Init | 11:59.38 |
| Though I haven't specifically tried gs+_init.ps it works for (eg) gs_ttf.ps | 12:00.00 |
Robin_Watts | It needs an absolute path? | 12:00.07 |
kens | I think so yes | 12:00.13 |
Robin_Watts | That's it. Thanks. | 12:00.35 |
kens | Its certainly safer that way | 12:00.37 |
| No problem | 12:00.48 |
Robin_Watts | calls ISP *again* about broadband not being right. | 12:21.13 |
| "We can have an engineer come around and try to run a ping test". | 12:21.33 |
kens | Helpful :-) | 12:21.47 |
Robin_Watts | "Or I could run it for you now... see, I've run it, and 0% packets dropped" | 12:21.50 |
| "oh, ok, we'll escalate it with BT again" | 12:22.02 |
kens | :-( | 12:22.08 |
Robin_Watts | kens, chrisl: I need a sanity check for some binary postscript please. | 12:43.43 |
| In the gs_init.ps file, we have: | 12:43.51 |
| pop userdict maxlength 0 eq | 12:44.04 |
| My compression code is replacing the 0 with 2 binary bytes 0x88 and 0x00 | 12:44.31 |
| (I know, that's larger, but ignore that for now). | 12:44.46 |
| PLRM 3, 3.14.1, page 158 (that's 172 according to acrobat) suggests that that should be the same. | 12:45.45 |
| but gs is barfing on it. | 12:55.10 |
chrisl | Robin_Watts: sorry, was on the phone. I've not much experience with binary PS, but that looks wrong to me | 12:58.32 |
Robin_Watts | ah, go on... | 13:00.17 |
chrisl | I'm going to have to read the PLRM more carefully | 13:01.12 |
| Although, as virtually *nobody* uses binary encoding, it's quite possible there's a bug in the interpreter - I doubt it's had much use | 13:03.17 |
| Robin_Watts: what's the error from Ghostscript? | 13:05.55 |
Robin_Watts | It just stops dead - this is very early in gs_init.ps | 13:06.14 |
chrisl | Well, reading the PLRM, what you've got actually looks right (I thought it was an 8 bit unsigned value that was offset by -128, but that's a font thing) | 13:07.50 |
| Robin_Watts: is there a way I can recreate this easily? | 13:11.15 |
Robin_Watts | Not ATM. Let me keep bashing. | 13:11.26 |
| If I don't get somewhere quickly, I'll make an example file. | 13:11.51 |
chrisl | You could try making it a 16 or 32 bit value, just to eliminate the 8 bit encoding in the interpreter | 13:12.12 |
Robin_Watts | OK. Create a directory foo. | 13:15.53 |
| then cp -pr Resource foo | 13:16.04 |
| Then insert http://ghostscript.com/~robin/gs_init.ps in as foo/Resource/Init/gs_init.ps | 13:16.29 |
| Then start gs with: gs -ZI -I/..../foo/Resource/Init/ | 13:17.03 |
| My changes to gs_init.ps are at line 49ish. | 13:17.53 |
| Swap the comments on lines 50/51 and you'll see the behaviour change. | 13:18.24 |
kens | Sorry was at lunch. | 13:22.32 |
chrisl | I don't see a difference in behaviour, I don't think it's even getting to the binary object | 13:23.34 |
Robin_Watts | Oh, pants. | 13:24.07 |
| I've added a new operator .setobjectformat which isn't in your copy of gs of course :( | 13:24.28 |
chrisl | Well, that won't work...... | 13:24.43 |
Robin_Watts | I need to turn binary encodings on, and I can't do that until we reach level 2. | 13:24.56 |
| why won't that work ? | 13:25.00 |
chrisl | Because I don't have the operator | 13:25.12 |
Robin_Watts | indeed, yes. | 13:25.22 |
| I was confused as to why I wasn't seeing the binary thing being parsed after maxlength was processed. | 13:25.52 |
| But I think I've twigged; because it's in { } all the parsing is done early. | 13:26.16 |
| so I need to look back a bit. | 13:27.02 |
chrisl | You won't see it being parsed until the ifelse is evaluated | 13:27.10 |
kens | Its parsed as its read, but it won't be executed until the ifelse is evaluated | 13:28.03 |
Robin_Watts | yeah, so the debugger wasn't stepping into a parsing thing at the point I was expecting, hence my confusion. | 13:28.35 |
| Gah. It's refusing to read the binary token as level2 isn't inited at that point :( | 13:36.51 |
kens | Well, there you go. | 13:37.05 |
Robin_Watts | How much would it hurt for me to enable level 2 right at the start? | 13:37.43 |
kens | As far as I'm concerned, not at all. We did discuss deprecatingh level 1 at the meeting if you recall. | 13:38.08 |
| I'd be happy to go straight to level 2. However, if it will actually work, I'm not certain..... | 13:38.36 |
Robin_Watts | Yes. What I'm doing now was the driving force for us dropping level 1. | 13:39.10 |
chrisl | Just go straight to level 3, for goodness sake...... | 13:43.33 |
kens | Yeah, its not as if anyone is going to build a level 2 rip. | 13:44.00 |
| Great the customer complaining about performance is using an old version of GS.... | 13:50.27 |
Robin_Watts | gah. | 13:54.52 |
| I put 2 .setlanguagelevel at the start of the file. | 13:55.13 |
| and it all ran fine, until in the middle of the file we set the languagelevel back to 1 again :) | 13:55.29 |
chrisl | why on earth would it do that?! | 13:55.54 |
Robin_Watts | I'm sure there is AVeryGoodReason(TM). | 13:56.15 |
chrisl | buried in the mists of time, and nobody remembers, probably..... | 13:56.47 |
Robin_Watts | gs_btokn.ps does it. | 13:57.47 |
| As does gs_setpd.ps | 13:59.38 |
| I think I need alexcher to comment here before I go any further. | 14:00.23 |
| lunchtime | 14:06.47 |
kens | quick fix chrisl :-) | 15:52.09 |
chrisl | Once I'd tracked down where the AFS code made the decision whether or not to render, it wasn't hard to make FAPI do the same | 15:52.56 |
kens | Nice to get it done, thanks | 15:53.13 |
chrisl | Looking at all the conditions it checks to see whether to render the glyph, it's not surprising I was getting confused trying to fathom it out........ | 15:54.01 |
kens | :-) | 15:54.18 |
chrisl | But yes, nice to get it done | 15:54.46 |
Robin_Watts | alexcher: Are you here ? | 16:54.30 |
henrys | So the uk is looking for spies and here's the testhttp://www.canyoucrackit.co.uk - this should finish off productivity for the day. | 17:07.54 |
kens | Been solved | 17:08.05 |
| Was cracked by a Google search first ;-) | 17:08.15 |
alexcher | Robin_Watts: Yes. | 17:10.17 |
Robin_Watts | alexcher: I've been looking again at my ps compaction stuff, for use with the gs_init files. | 17:10.48 |
| In order to use binary compression, it needs to be in level 2 mode. | 17:11.05 |
| So I've added '2 .setlanguagelevel 2 setbinaryformat' to the start of gs_init.ps | 17:11.47 |
| And I've added some code to mkromfs to spot special comments of the form: INARYON and INARYOFF to turn the use of binary encodings on and off. | 17:12.29 |
| Bah. Stupid irc. That should be PERCENT B I N A R Y O N etc :) | 17:13.07 |
alexcher | Robin_Watts: So what does cluster say? | 17:13.41 |
Robin_Watts | And in the places in the startup code where it drops back to level 1 explicitly (gs_btokn.ps and gs_setpd.ps) I've wrapped them in %BINARYOFF %BINARYON | 17:14.36 |
| I haven't got as far as running it in the cluster yet. | 17:14.48 |
| It still won't start up. | 17:14.52 |
| It goes wrong when trying to do 'currentglobal'. | 17:15.01 |
| and 'defineresource' also causes it problems. | 17:15.26 |
| Note, it's not .currentglobal that's the problem, but currentglobal. | 17:15.47 |
| Does the postscript startup code set up an currentglobal as an alias for .currentglobal ? | 17:16.16 |
| And if so, does the code that sets up that alias go wrong if the interpreter is already in level 2 mode? | 17:16.37 |
alexcher | Robin_Watts: Probably, I need to check this. | 17:17.02 |
zeroG | hello | 17:20.09 |
ghostbot | what's up | 17:20.09 |
zeroG | MUPDF | 17:20.25 |
alexcher | Robin_Watts: Operator /currentglobal is defined in gs_lev2.ps | 17:20.30 |
Robin_Watts | right. | 17:20.37 |
zeroG | i want to know how to print document with MUPDF? | 17:22.44 |
Robin_Watts | zeroG: What do you mean? | 17:23.27 |
| pdfdraw will take a PDF file and make you images from it at any specified resolution. | 17:23.43 |
zeroG | i want print document with my vb.net code | 17:23.54 |
| on printer | 17:23.57 |
| i want use MUPDF | 17:24.08 |
Robin_Watts | mupdf does not know how to drive any printers directly. | 17:24.10 |
| pdfdraw IS mupdf. | 17:24.18 |
| (it's the same core libs as the mupdf viewer, just wrapped in a different way) | 17:24.37 |
zeroG | okay | 17:25.18 |
Robin_Watts | I would have thought that it was easy enough to print a bitmap from .net, right? So call pdfdraw to make you the bitmap and then print that. | 17:25.31 |
kens | Make a printer DC bitblt the bitmap tot he pritner DC and away you go. | 17:26.03 |
Robin_Watts | or, if you want a tighter integration, you can call the mupdf C functions directly - pdfdraw will again be a good starting point for that. | 17:26.07 |
| but be aware of the licensing of mupdf... the tighter the integration, the harder it is to use it under GPL terms. | 17:26.38 |
| alexcher: What I don't immediately follow is why that's problematic for it to work in level 2 mode ? | 17:27.28 |
| alexcher: http://ghostscript.com/~robin/0001-WIP-mkromfs.patch <- That's my changes if you want to try them. | 17:29.38 |
alexcher | gs_lev2 runs quite late and /currentglobal may be not defined early enough. | 17:31.38 |
Robin_Watts | but I haven't changed the order in which any files are included. | 17:32.00 |
alexcher | Robin_Watts: Do you want be to debug the patched gs? | 17:32.35 |
Robin_Watts | If you wouldn't mind - you can probably understand the postscript far better than me. | 17:33.09 |
alexcher | OK | 17:33.19 |
Robin_Watts | tor8: ping ? | 17:55.13 |
tor8 | Robin_Watts: pong. | 17:55.38 |
Robin_Watts | So... before we can fold context onto master, we need to do some API tweaks ? | 17:55.58 |
tor8 | yeah. | 17:59.37 |
henrys | Robin_Watts:the matrix inverse issue should never be a performance bottleneck right? The inverse call is certainly easy reading and preferable maintenance wise. | 17:59.41 |
tor8 | I've been mulling over that, but I'm not sure exactly how I want to change things | 17:59.56 |
Robin_Watts | henrys: matrix invert is a heavy operation. | 18:00.09 |
tor8 | Robin_Watts: if you look at ios/document.[ch] there are some ideas for a higher level access api | 18:01.08 |
Robin_Watts | 2 extra inverts per image doesn't sound a lot, but we see lots of PS/PDF files where images are made by 'stacking' 1 pixel high images. | 18:01.11 |
| Why is invert.scale(x,y).invert easier to read than scale(1/x,1/y) ? | 18:01.46 |
| (The scale may need to change between being a post multiply and a pre multiply) | 18:03.05 |
henrys | Robin_Watts:it isn't 2 extra inverses per image exactly, we aren't doing this for all images and it is very rare or did I misunderstand something. | 18:04.10 |
Robin_Watts | We'd be doing this for all "explicit masking" images. | 18:04.40 |
| i.e. whenever we get an explicit masked image, we ignore the supplied matrix and use one of our own concoction. | 18:05.11 |
henrys | oh I see I wasn't following the issue correctly, sorry | 18:05.43 |
Robin_Watts | I'm used to working on embedded devices, where a single floating point op is worth avoiding. On the kind of metal that gs runs on it's probably not an issue. | 18:06.12 |
| But why not get it right first time? | 18:06.20 |
henrys | Robin_Watts:okay at some point we should say he's beat on it enough and take it over - the bounty program really isn't intended to turn into 5.00 an hour type thing. | 18:10.07 |
Robin_Watts | Sure. | 18:10.17 |
henrys | or if you want him to work it more I'll change it to P2 | 18:11.13 |
Robin_Watts | Let's take it as is, pay the bounty and I'll add a note in there saying it's something that can be optimised later if it turns out to be a bottleneck. | 18:15.30 |
henrys | great | 18:16.12 |
Robin_Watts | tor8: document.c,h are supposed to be the kind of thing that a viewer might like to use ? | 18:24.13 |
| It strikes me that a viewer would like to have a document from which it can hold multiple open pages, not just one. | 18:24.45 |
tor8 | Robin_Watts: yeah. that api just caches the last page accessed behind the scenes and doesn't expose the pdf_page/xps_page struct | 18:29.06 |
| makes it easier on the viewer, he doesn't have to juggle anything. but it belongs in a wrapping layer, not inside the pdf/xps document objects themselves. | 18:29.37 |
Robin_Watts | tor8: I'd be tempted to try to come up with an API that's more OO. | 18:29.38 |
| The viewer shouldn't care if it's a PDF or an XPS document. | 18:29.59 |
tor8 | that's what the ios/document.c takes care of. but the implementation, yeah, it's not pretty | 18:30.22 |
| something function pointer based like the device interfaces perhaps | 18:30.41 |
Robin_Watts | And I want to be able to 'getPage(document)' - if it's cached, then great, you get it instantly. | 18:30.55 |
| Actually, we'd want 'claimPage' and 'releasePage' to ensure that pages didn't get freed unexpectedly. | 18:31.39 |
| How does the ios thing cope when you can see multiple pages on screen at once ? | 18:32.44 |
| Hmm. pdfdraw gets this right, mupdf viewer gets it wrong :) | 18:33.27 |
tor8 | Robin_Watts: it caches the bitmaps in a UIView | 18:33.45 |
Robin_Watts | right. | 18:33.51 |
tor8 | renders on the fly, with not a care about anything other than the page number | 18:34.04 |
| the question is what you want the page object for. as I can see it's the page dimensions, text (for search and copy/paste) and drawing to a bitmap, and links and eventually annotations | 18:35.22 |
| the second question is, do we want to push the loaded page object juggling to the client or hide it in the library | 18:35.59 |
Robin_Watts | tor8: As a viewer implementer, I'd like to be able to 'open' a document (not caring what type it is), | 18:37.14 |
| to be able to ask what the dimensions of page are (without parsing it all) | 18:37.34 |
tor8 | sadly the page dimensions for xps aren't available without parsing the xml :( | 18:38.00 |
Robin_Watts | Right, but it doesn't require a complete parse of all the page? | 18:38.23 |
| (or even if it does, I shouldn't need to worry about that as a caller) | 18:38.38 |
tor8 | doesn't need a graphics parse | 18:38.41 |
Robin_Watts | right. | 18:38.46 |
tor8 | but it's still fairly expensive, cracking xml is a lot of string copying | 18:38.57 |
| I have some ideas of how to optimise it by storing string pointers directly in the source data instead of malloc+strcpy | 18:39.25 |
Robin_Watts | I'd want the option to do some sort of 'preRender' call (to make a displaylist) | 18:40.06 |
| Then a 'render' (to render the displaylist). | 18:40.19 |
| I'd want to be able to abort the preRender/render calls somehow. | 18:40.40 |
| Need to think about searching (but I'd like to be able to get a list of rectangles back for my search results, on a page by page basis) | 18:42.46 |
mvrhel_laptop | bbiab | 19:47.34 |
Robin_Watts | tor8: ping | 20:19.30 |
| I have some changes to pdfdraw here. | 20:19.40 |
| I've added -i and -f flags, that toggle the decompression of image and font streams respectively. | 20:20.04 |
tor8 | you mean pdfclean? | 20:20.20 |
Robin_Watts | So -d -i -f will leave images and font unexpanded. | 20:20.25 |
| Yes, sorry. | 20:20.27 |
tor8 | leaving images compressed is something I've thought about before, so thanks! | 20:20.44 |
Robin_Watts | Otherwise this file turns into 160Gig and I can't look at it in an editor :) | 20:20.51 |
| 160Meg, soryr. | 20:21.07 |
tor8 | 160gig would be quite big | 20:21.23 |
Robin_Watts | pushed to my repo | 20:22.50 |
tor8 | ugh, bit voodoo... | 20:25.09 |
Robin_Watts | oh, yeah. I should use an enum. Let me fix that. | 20:25.23 |
tor8 | or more flags: dontexpandfonts etc | 20:25.37 |
| perhaps "\t-f\tnever decompress font streams\n" to be more clear about what the flag actually does too | 20:27.05 |
Robin_Watts | No, it toggles. | 20:27.17 |
| just -f will only decomp font streams. | 20:27.27 |
| I couldn't see another way of working that wouldn't change the existing behaviour. | 20:27.43 |
tor8 | right, xor bits | 20:27.53 |
| I think -d to decompress, and then -f and -i to suppress decompression is the clearest set | 20:28.28 |
| at least it's the one that makes most sense to have | 20:28.38 |
Robin_Watts | Then how do you expand JUST images ? | 20:28.45 |
tor8 | why would you want to? | 20:28.52 |
Robin_Watts | I could imagine it'd be useful for debugging. | 20:29.09 |
tor8 | if you're decompressing images, it won't hurt to decompress the rest either | 20:29.31 |
| but if you feel strongly about it, I won't object | 20:29.59 |
Robin_Watts | OK. Consider expanding 'just fonts'. | 20:30.27 |
| ah well. | 20:30.51 |
| I prefer the power of the toggle, and it's what I've coded. | 20:31.03 |
tor8 | I'd do that with -di to decompress most of the file and leave the big images compressed :) | 20:31.09 |
| the power of a toggle is undeniable, it's just explaining it in the manpage that can confuse people :) | 20:31.30 |
Robin_Watts | that's fine as long as you haven't got some huge horrid repeated content stream. | 20:31.45 |
| What was that 'better than PDF for scanned documents' format that was being touted? | 20:32.18 |
tor8 | and with a toggle, bitmask with some enums or defines are fine for doexpand | 20:32.26 |
| DjVu? | 20:32.33 |
Robin_Watts | yeah, could be. | 20:32.38 |
| image for the background, image for the foreground, image for a mask. | 20:32.49 |
tor8 | yeah, that one. it's a decent format, technically. | 20:32.56 |
Robin_Watts | This file is of that format. | 20:33.01 |
| (or rather it's clearly come from that format). | 20:33.09 |
tor8 | but djvu is encumbered by a nasty patent in the arithmetic decoder | 20:33.22 |
| so, a jpeg2000 background masked with a jbig2 image? | 20:33.38 |
Robin_Watts | 6 Megapixel background image, 6 Megapixel foreground image, 30Megapixel mask. | 20:33.47 |
tor8 | certainly sounds like djvu! | 20:34.16 |
Robin_Watts | DCT background, JBIG2 mask, flate foreground | 20:34.38 |
| pdfdraw gets it right. | 20:34.52 |
| mupdf misses out bits of page 3. | 20:34.58 |
| but only if I don't make page3 page 1 | 20:35.17 |
| or delete the other pages | 20:35.22 |
tor8 | ow. | 20:35.35 |
| smells like trouble | 20:35.39 |
Robin_Watts | Ah, I can get it in pdfdraw too, if I draw all 3 pages. | 20:41.17 |
| and I see the errors :) | 20:41.47 |
| warning: pixmap memory exceeds soft limit 249M + 31M > 256M | 20:41.58 |
| error: out of memory | 20:42.00 |
| warning: cannot draw xobject/image | 20:42.02 |
kens | Was about to guess at a memory problem. | 20:42.13 |
Robin_Watts | oh, crumbs. | 20:45.36 |
| I hadn't spotted the fz_memory_used statics | 20:45.47 |
kens | That doesn't sound good | 20:45.48 |
Robin_Watts | OK. I understand the problem - it's to do with stuff being kept in the store and hence running us out of the softlimit. | 21:00.56 |
| When the store is next aged, it frees up enough, and the next page succeed. | 21:01.11 |
| s | 21:01.13 |
| So, to fix it, we need to be able to evict from the store mid-page, and that's something I've wanted to be able to do for a while - need to turn the store into a cache. | 21:01.39 |
| So I''ll look into that tomorrow. | 21:01.48 |
kens | Yep, sounds like a vital enhhancement | 21:02.48 |
Robin_Watts | tor8 and I have talked about it before. | 21:06.50 |
kens | Now you have a reason ;-) | 21:07.10 |
tor8 | Robin_Watts: patch looks good to me now, feel free to push | 21:14.57 |
kens | I'm off, night all. | 21:25.10 |
mvrhel | bbiaw | 22:08.05 |
| Forward 1 day (to 2011/12/13)>>> | |