Repository navigation
Releases: DedovMosol/iwoHelperDesktop
Release list
v1.18.4
iwo Helper Desktop v1.18.4
Changed
- More operations UI simplified with dropdown menus. Operation buttons grouped behind two menus: "Convert..." (Save PDF, Compress, Grayscale, Repair) and "Extract..." (Pages to images with DPI submenu, Text to .txt). Print kept as separate button (frequent operation). Same functionality, less visual clutter (11 buttons → 5).
- Per-Monitor DPI v2 support added for Windows 10 1703+. The application now declares
PerMonitorV2DPI awareness in addition to the legacytrueflag, providing better scaling behavior when moving windows between monitors with different DPI settings. Falls back gracefully on older Windows versions. - Keyboard shortcuts enhanced for thumbnail zoom and navigation. Added Ctrl+Plus/Minus for zooming thumbnails (complementing the existing Ctrl+scroll wheel), and Home/End keys to jump to the first/last page. These shortcuts work across all PDF tools (Merge, Split, PDF → Word, PDF → PowerPoint, More operations). The keyboard step is the same one the wheel uses, and the cheat sheet (☰ Menu → Keyboard shortcuts) now lists both.
- Page range input enhanced with presets in Split/Extract. The page range text field is now a dropdown with common presets: "All pages", "Odd pages", "Even pages", "Every 2nd", "Every 3rd", plus custom input. Select a preset and the range string (e.g., "1,3,5,7,9") is filled in automatically, ready to edit or use as-is. A preset that would be empty for the open document — there are no even pages in a one-page file — is not offered at all, and a long list is shortened in the dropdown (
1,3,5,…,499) while the full range is what actually gets used. Opening another document rebuilds the presets: a range typed by hand is kept, one filled in from a preset is not, since1-10from a ten-page file means nothing in a three-page one.
Added
- Nested list support in PDF → Word conversion. Lists with indentation-based hierarchy (bullet and numbered lists at multiple levels) now preserve their nesting structure in the output Word document, up to Word's nine levels. Levels are tracked as a stack of open indents, so a level is the depth of an indent rather than the order in which edges were met: an item indented between two known levels returns to the matching one instead of claiming to be deeper than all of them, and coming back to an outer indent closes the inner levels by itself. An indent step under 12 pt counts as the same level, which keeps a flat list with a ragged left edge — continuation lines, slight jitter in the extracted coordinates — from being emitted as a spurious multi-level list. Previously, all lists were flattened to a single level.
Fixed
- A tool window could be closed while a PDF was still being parsed. The guard checked only the "operation running" flag and missed the "document loading" one, so the window closed mid-parse and the background work then reached for controls that were already gone.
- Settings could lose a write when two windows were closed at once. Saving a setting is a read-modify-write of a single file, and it now runs under the same named mutex the usage counters and the operation history already used.
Files: iwoHelperDesktop-1.18.4.exe / iwoHelperDesktop-1.18.4-x86.exe - portable (single file, 64-bit / 32-bit); iwoHelperDesktop-setup-1.18.4.exe / iwoHelperDesktop-setup-1.18.4-x86.exe - installers with bundled Ghostscript (per-user install, no administrator rights). Take x64 unless your Windows is 32-bit.
v1.18.3.1
iwo Helper Desktop v1.18.3.1
Changed
- A blank sheet can now be inserted in every tool that edits pages, not only in More
operations: Merge, Split, PDF → Word and PDF → PowerPoint have it too, from the same
context menu. The machinery — the window's wrapper folder and the insertion itself — moved
into the shared base, so all of them got it at once and there is one copy of it, not five. - The start screen opens full-screen. It was a fixed window; now it resizes and maximises
like the tool windows, and the cards stay centred as a group rather than sticking to the
top-left corner. Stretching them would have been worse: a card has a size at which its
glyph, name and description read well.
Fixed
- The start screen did not remember its size or state. It had been a fixed window, so
there was nothing to remember; once it became resizable, that omission showed. It now
persists like every tool window. - The recent-files cards now live in the bottom row, which was empty between the two
icons anyway — so they are visible at the default window size and take nothing away from
the tool cards. They were a separate strip at first, and since the window height is chosen
so the tool cards fill it almost exactly, that strip only had room in a stretched window.
If the row is too narrow for three cards, fewer are shown rather than three unreadable
slivers — the file name is the whole point of the card. - The recent-files cards could sit on top of the tool cards in a small window, and in some
cases did not appear at all. The second was the worse of the two: the cards were built in the
constructor, before the window had a handle, so the answer from the background check had
nowhere to be delivered. They are built on show now. As for the room they take: the window
height was chosen so the tool cards fill it almost exactly (it already spans a 1366×768
screen), so the strip appears only when the window is stretched enough to hold it — choosing
a tool is what this screen is for, and nothing may cover that.
Added
- Recent files are now cards with the glyph of the tool that made them, and they refresh
by themselves — finish an operation in any window and the start screen shows the result at
once, with no restart. The glyph comes from the operation rather than the extension, so a
renamed file still shows where it came from. Clicking or pressing Enter opens it.
Files: iwoHelperDesktop-1.18.3.1.exe / iwoHelperDesktop-1.18.3.1-x86.exe - portable (single file, 64-bit / 32-bit); iwoHelperDesktop-setup-1.18.3.1.exe / iwoHelperDesktop-setup-1.18.3.1-x86.exe - installers with bundled Ghostscript (per-user install, no administrator rights). Take x64 unless your Windows is 32-bit.
v1.18.3
iwo Helper Desktop v1.18.3
Added
-
PDF operations from the command line. Merge, extract, split (by ranges, every N, or
bookmarks), compress, grayscale, repair, pages to images and text to.txt— the same
operations as in the windows, for batch work and scripts. Nothing new is computed: the
command line parses arguments into a description and hands it to the very service the
button calls, so the two cannot drift apart in behaviour. Exit codes match the Excel mode:
0 done, 1 failed, 2 bad usage;--helpprints the list. A mistyped option gives 2 with an explanation rather
than quietly doing something else. Sources are never modified here either: commands that
change a file work on a copy, and input equal to output is refused. -
Recent files on the start screen. The last few files the app produced sit in the bottom
row as links — one click opens the one you were just working on, without hunting for the
folder. Built on the history that was already kept, so nothing new is recorded and the
privacy switch that turns history off turns this off too. Files that have since been moved
or deleted are not listed: a quick-access list where half the entries fail to open is worse
than no list. Nothing is shown at all when there is nothing to return to. -
A blank sheet can be inserted into the page grid. In More operations, from the page grid's
context menu: the sheet goes in after the selected page (at the end if nothing is selected) and
takes the format of its neighbour, because a sheet of a different size in the middle of
a document reads as a mistake rather than an intention. From there it is an ordinary page —
move it, rotate it, print it, save it. It arrives the same way an image does: as a one-page
wrapper in the window's temporary folder, so nothing in the grid needs a special case for it. -
Print now shows what will come out. Choosing a printer is followed by a preview of the
sheets, with Print and Cancel — paper is spent only after it has been looked at. The preview
draws the very same print job that is then sent, so the two cannot disagree. It shows the
first few sheets rather than the whole job, and says so: the question a preview answers is
"how will this lay out", and the control it is built on renders every shown sheet at once
and keeps the rasters — a hundred pages would mean a hundred rasters and a frozen window.
Printing itself is unchanged: still in the background, with progress and cancellation. -
Password-protected PDFs open now. Until this version such a file simply did not load —
the tool refused exactly when it was needed. The password is asked for in a dialog that
names the file, so a batch where only one document is protected makes it obvious which
one is being asked about. A wrong password asks again and says so. Cancelling skips that
file and the reason appears in the summary of what was not added — and the dialog warns
about this before you cancel, rather than putting a second window in the way
afterwards: ten protected files would otherwise mean twenty windows to close.
The password reaches everything that opens the file — pages, thumbnails, text, document
composition — through one registry, so it is entered once per file per session. It never
touches the disk: not the settings, not the reports, not the crash log.
Fixed
- Work that belonged in the background had slipped onto the UI thread — twice, in this very
version. Inserting a blank sheet read its neighbour's size by parsing the document (278 ms
on a 900-page file, measured), and the recent-files row called on start — about
a second per path when the path is on a disconnected network share, which would have delayed
the start screen by seconds. Both now run in the background, and a test pins them there,
because catching this by hand needs an unplugged network at the right moment. - A failure while asking for a password could leave a window locked forever — the load
state was never cleared, so buttons and grid stayed disabled until the tool was closed. - ** opened a window instead of printing help.** An unknown first argument sends the
app down the normal GUI path, so the console got nothing at all. - "The file is already optimized" was a lie for scans. A four-page scan of 1.6 MB: no
text at all, four images making up 99.8 % of the file. The "Very good" level leaves images
alone by definition, so the rebuilt document came out 0.1 % larger, was rejected, and the
status reported the file as already optimized — while the very same file shrank by 64 % on
"Good" and by 88 % on "Normal". The message was formally true and substantially false.
When compression gains nothing, the document is now looked at: if it is mostly images and
the chosen level does not recompute them, the status says so and points at what to pick
instead. The look costs nothing on the normal path — it only happens when compression
already failed to help. - Merging and splitting silently dropped the table of contents. Pages were copied one by
one, and the bookmarks stayed behind in the source: a four-page document with three
bookmarks came out of a merge with none, and out of a split with none. The file opened,
looked intact, and had lost its navigation — the worst kind of data loss, because nothing
reports it. Bookmarks are now carried across in all five paths (merge, extract, by ranges,
every N, by bookmarks), pointing at wherever their page ended up: reverse the page order
and the contents follow. A bookmark whose page did not make it into the result is dropped,
but its children are lifted to the freed level rather than vanishing with it — removing one
section must not take half the contents with it.
Files: iwoHelperDesktop-1.18.3.exe / iwoHelperDesktop-1.18.3-x86.exe - portable (single file, 64-bit / 32-bit); iwoHelperDesktop-setup-1.18.3.exe / iwoHelperDesktop-setup-1.18.3-x86.exe - installers with bundled Ghostscript (per-user install, no administrator rights). Take x64 unless your Windows is 32-bit.
v1.18.2
iwo Helper Desktop v1.18.2
Added
- A compression level that leaves the pictures alone. Between "Excellent — no
compression" and "Good — 150 dpi" there was a cliff: either the file stayed as it was, or
every image in it was recomputed. Most documents need neither — they are already made of
text, and the bytes sit in how the file is put together. "Very good — smaller, image
resolution kept" rebuilds the document without touching a single picture: pages are
re-packed, identical images stored once, leftovers not carried over. Measured on four
documents: 25 % to 48 % smaller at untouched resolution, and on a file built from repeated
images — 136 times smaller.
It is deliberately not called "lossless". The document is rebuilt, and its rendered page
differs from the source by hundredths of a tone; what is guaranteed is the images, and the
label says exactly that and nothing more.
The promise is held by our own arguments (-dDownsample*Images=false), not by the engine's
defaults: the portable build runs on whatever Ghostscript the machine has, and its version
is not ours to assume. - The number of a compression level is now an identifier, not a position. Levels are
stored insettings.txtas numbers, so the new one was appended at the END of the
enumeration even though it belongs in the middle of the list — otherwise everyone who had
picked "Good" would have silently ended up on a different level after updating. The order
shown in the list lives separately, in one place, and a test pins both.
Fixed
-
Grayscale no longer reports success it cannot vouch for. The engine exits with zero
even when part of the content stays coloured — colour arrives through ICC profiles,
palettes and transparency groups, and no list of switches covers all of them in advance.
The result is now looked at: pages are rendered and searched for saturated pixels, and a
document that did not come out grey is not passed off as done. The check can only
disprove — if a page cannot be rendered at all (old Windows, no WinRT), that is not
treated as "still coloured", or the feature would break on the very machines where it
used to work. -
The grayscale switch that documentation asks not to use.
-dProcessColorModel=/DeviceGray
stood next to-sColorConversionStrategy=Graywith a comment claiming both were required.
That knowledge predates Ghostscript 9.11: the docs state the strategy sets the model itself
and that specifying both should be avoided, and bug 693074 is filed on this exact pair
("some images are not converted"). Verified on eight probes — vector, colour JPEG, CMYK,
indexed palette, Separation, transparency group, soft mask, real transparency: the strategy
alone converts all of them, leaving only DeviceGray inside the file. -
Every Ghostscript run is now checked for having kept the document. The old test was the
first five bytes being%PDF-; a stunted output passed it. Now the pages are counted before
and after, and a result that lost or gained pages is rejected — one rule for compression,
grayscale and repair alike, and lenient exactly where there is nothing to compare against
(repair opens a file that is broken by definition).
The pages are counted with PdfPig, not PdfSharp, and that is load-bearing: PdfSharp 1.50
cannot read object streams (PDF 1.5+), which Word and Acrobat write by default, so counting
with it would have turned a healthy compression into "could not compress" on such files. A
live test pins this. -
A silent status when compression gained nothing. Choosing "Compression" in Merge or
Split and getting a plain "Pages saved: 10" left no way to tell whether it had worked.
Requested compression that did not make the file smaller now says so. "More operations"
already did; the other two stayed quiet. -
A page at the format's limit could cost the colour check 400 MB. PDF allows a sheet of
14400 pt at a width of a few, and the check renders by width — so the raster grew to
140 × 672000 pixels. It was not caught by reasoning: on the development machine the system
renderer declines such a page outright and costs nothing, and only the build machine drew
it in full. The renderer now takes an optional ceiling on raster height and the check uses
it: the same sheet costs 19 KB, and — a second gain — it is now actually examined instead
of being silently skipped. Thumbnails and the preview are untouched: their width is given
and a long page simply comes out a narrow strip.
Changed
- The check of a converted file is no longer wired into the compression class: the pipeline
guarantees the document survived, the caller adds what only it can judge — size for
compression, absence of colour for grayscale. Three call sites, one rule each. - The status line no longer names a resolution where none was applied: a level that keeps
the pictures reports "image resolution kept" instead of "images to 0 dpi".
Files: iwoHelperDesktop-1.18.2.exe / iwoHelperDesktop-1.18.2-x86.exe - portable (single file, 64-bit / 32-bit); iwoHelperDesktop-setup-1.18.2.exe / iwoHelperDesktop-setup-1.18.2-x86.exe - installers with bundled Ghostscript (per-user install, no administrator rights). Take x64 unless your Windows is 32-bit.
v1.18.1
iwo Helper Desktop v1.18.1
Added
- More operations became a page workshop. Its grid used to be a viewer: the pages of the
open document could be looked at and nothing else, because every action was a copy of the
file. Now the pages are reordered by dragging, rotated, removed, cut and pasted, undone with
Ctrl+Z — exactly as in the other tools — and every action applies to the document as it is
assembled on screen, not to the file on disk. Compression, grayscale, images, text, print
and properties all take the assembled document; until the pages are touched the source is
simply copied, so nothing became slower for the ordinary case.
The window says so plainly: while the grid differs from the file, the status line reports how
many pages are assembled in it. A window that shows one thing and does another is the worst
kind of correct. - Images become pages. Photos and scans (JPEG, PNG, BMP, GIF, TIFF, including multi-page
TIFF) are added to the same grid with "Add images..." or by dropping them on the window, on
the grid or on the tool's card. Each image becomes an A4 sheet with 1 cm margins, fitted whole
and centred without distorting its proportions, and the sheet takes the orientation of the
image. From there it is an ordinary page: rotate it, reorder it, print it, compress it.
It went into this window rather than into a seventh one because everything one does with such
a page — turning, ordering, compressing, printing — already lives here.
A JPEG is carried into the PDF as it is, without re-encoding: a 12-megapixel photo would
otherwise bloat the file and lose quality for nothing. Transparency lands on white (without
it a PNG arrives as black patches), and the EXIF orientation tag is applied — GDI+ ignores it,
which is why a phone photo used to lie on its side. - "Save PDF..." in More operations. The assembled document becomes a new file: that is how
images turn into a document, and how a reordered, rotated or thinned-out PDF turns into one.
The compression level comes from the same list at the bottom of the window. Cancelling leaves
no half-written file, as everywhere else. - Print in More operations. The selected pages (or all of them) go to a printer with the
rotations assigned to them.
Fixed
- The beta note in PDF → Word and PDF → PowerPoint was cut off. Its height was a number
(two lines), so the tail of the sentence disappeared under the grid: 2 pixels short at the
normal font, and a whole line and a half missing with a large system font — the reader saw a
truncated phrase and never learned the main thing, that a scan cannot be converted at all.
The height is now measured from the text at the current width, and the grid and the buttons
move down by exactly as much as the note took. A live test measures the note in a real window
at its minimum size, at the normal font and at a large one. - Ctrl+Z did not undo a rotation in Split PDF. The rotation went into the history, but the
key was locked behind the right to reorder pages, which that window does not grant — so the
undo existed and was unreachable. The keyboard cheat sheet promised it just as inconsistently.
Changed
- The layer "page order ↔ grid" now lives in one place for all tools (
PdfPageOrderFormBase):
the multi-file tools and the single-document ones share it instead of holding two copies. The
minimum height of the More operations window is computed from the panel it actually built,
not written as a number — the previous number was already wrong once on a screen with a
different scale factor.
Files: iwoHelperDesktop-1.18.1.exe / iwoHelperDesktop-1.18.1-x86.exe - portable (single file, 64-bit / 32-bit); iwoHelperDesktop-setup-1.18.1.exe / iwoHelperDesktop-setup-1.18.1-x86.exe - installers with bundled Ghostscript (per-user install, no administrator rights). Take x64 unless your Windows is 32-bit.
v1.18.0
iwo Helper Desktop v1.18.0
Added
- PDF → PowerPoint. A sixth tool: the pages of a born-digital PDF become slides whose
text is real, editable text — not a picture of text. PowerPoint is not needed: the
.pptxis assembled by the app itself, so the tool works exactly where Office is not
installed, and its result can be checked automatically instead of by eye.
Each slide is two layers. The text is placed as ordinary text boxes where it was, with
font, size, weight, colour, underline, super/subscript and hyperlinks; tables become real
slide tables with their merged cells; identical images are stored once and photos are
repacked, so a deck of fifty slides does not turn into tens of megabytes. Everything that
is not text — background, frames, charts, vector logos — arrives as the page rendered
without its text layer, because on a normal slide that is most of the picture, and a
text-only conversion would leave a handful of labels on white. Without Ghostscript the
deck degrades to text only, silently and by design.
A paragraph becomes one text box, and the lines inside it keep their own positions rather
than being re-flowed: a slide has no way to re-flow text faithfully — another engine breaks
lines by its own metrics — while underlines, frames and rules arrive with the background
and stay where they were, so a re-flowed paragraph would drift out from under them. Where
the file carries document structure, the boundaries of those paragraphs are read from it
instead of being guessed from the gaps between lines.
Slide size follows the pages (a 16:9 deck stays 16:9, an A4 document becomes A4 slides);
a presentation has one slide size, so mixed input takes the most common one and scales the
rest to fit and centres them. The window is the one already known from PDF → Word — the
same grid, ordering, preview, rotation and cancellation — because both are the same job
with a different destination, and that window now exists once instead of twice. - Settings. A window for what belongs to the whole program rather than to an open
document. The start screen's bottom row leads to it, and so does every tool's ☰ menu.
The zoom level and the compression level deliberately stay in the tools: they are
changed while working, and moving them here would mean walking there and back for
every file. Language stays on the globe and in the menu for the same reason — a third
door is a third place to remember, and switching the language rebuilds the windows. - A check for a newer version at startup. It runs in the background, so nothing waits
for the network, and it is silent about everything except news: no connection, no
answer, or “you have the latest” all pass without a word, because nobody asked the
question. When there is a newer version the notice carries a “Don't remind me about
this version” box — it records the version, not a plain “never”, so the next release
is still announced. The check can be switched off in Settings. - A history of operations. What was made, when, and where it went — paths and names
only, never a copy of a file. The last 200 entries are kept, older ones can be dropped
by age, the list can be cleared with one button, and the whole thing can be switched off
— switching it off clears what has been collected. Opening a result checks it is still
there first, because the path may have gone stale.
Changed
- The start screen's bottom row is two icons. “Settings” and “About” were two wide
captions occupying a third of the row for actions taken once in a while; they are now a
gear and a circled question mark, with the wording kept in the tooltip and in the name a
screen reader announces. Inside Settings the three history actions moved into one row and
the heading is centred, so the window is a screenful shorter; the paragraph explaining the
update check is justified to both margins, because a ragged right edge is far more visible
in a narrow window than in a page-wide text. - A large system font no longer reaches our layout. Every window sets its own font, but
menus did not: a menu strip has a fixed height and drew its items with the system menu
font, so the “text size” accessibility setting could clip the captions from below. Menus
now use the application font like everything else — the one place where that setting could
still reach the layout. - A double-click on the zoom percentage resets it to 100 %, the same as a double-click on
the “%” next to it and the same as Ctrl+0. It used to select the number instead, and a
selection that appears out of nowhere reads as “copied to the clipboard” — a gesture that
looks like it worked while doing nothing. A double-click on the spinner arrows still means
two steps of zoom, not a reset. - The window header is vertically centred. The title and its subtitle were pinned to the
bottom edge of the coloured band, leaving empty colour above them — which read as a header
that had slipped down. The block now stands in the middle of the band, and the language
globe and “Back” follow it, because they are aligned to the text and not to a literal. - The README badges sit on one line again. Each was on its own source line, and GitHub
renders that as a break — the row of badges came out as a column. - The README contents carry the same icons as the sections they point to, and the banner
says what the app does now — the tagline is redrawn bytools/set_banner_tagline.ps1,
which restores the background under the line by interpolating the untouched rows around it
instead of guessing the gradient, and shrinks the font until the line fits. - The download links live in one place. Four large buttons at the top of the README
repeated the Download section word for word, and both rows were wider than the README
column on a desktop, so they wrapped and the wrapped tail was centred — which is what
“the links go vertical” looks like. Measured and fixed: no row now outruns the column. - The user guide builds its own contents page. It used to ship with an empty one and a
line asking the reader to press Ctrl+A and F9.
Fixed
- Cancelling during compression did nothing. Splitting a document runs in two phases,
and the second one — compressing each part with Ghostscript — is the longer of them:
forty parts are forty separate runs. The Cancel button was withdrawn at the start of it,
on the grounds that the files were already written and there was no way back. Now that a
stopped job cleans up after itself there is a way back, so the button stays and the work
stops between parts. The one thing not interrupted is a single Ghostscript run: killing
another process halfway leaves its temporary file behind, which is worse than waiting out
one part. Merging still has no cancel there, and that is right — it compresses a single
file, so there is nothing to stop between. - “Not enough space” now names the disk everywhere it can happen, not only in the three
places it was first added: the Excel digest, saving pages as images, editing document
properties, saving through Word and the text export. Some of those report a failed write
in their own words — GDI+ answers every one of them with “a generic error occurred” — so
when the error itself is silent about space and the drive turns out to be nearly empty,
the message keeps what the system said and appends how much is left. A guess is marked
as a guess; only the system's own verdict is stated as fact. - A paragraph beginning with an indent could be mistaken for a centred line and torn out
into a paragraph of its own — centred, at that. A centred line was recognised by its two
margins differing by no more than a share of the column width, and on a wide page that
share is large enough to cover a first line that stops a couple of points short of the
right margin. The two margins must now also be comparable to each other; a title knocked
off the axis still passes, a first-line indent no longer does. - A cancelled or failed split left the files it had already written. Cancelling had
cleaned up for a while; failing had not, on the reasoning that half a result is better
than none. It is not: a folder holding seven parts of forty does not look incomplete —
half a set looks like a set, and it gets carried onward as one. Whatever stopped the
work, the work did not happen, so neither should the files. The one exception is running
out of memory, where tidying up is more dangerous than leaving things alone. - “There is not enough space on the disk” now says which disk, and how much is left.
The result goes to one folder and the temporary files to another, on a different drive,
and either can fill up; the system's own message names neither. - A page whose text is part of the picture is now reported. A document that is entirely
a scan is refused up front, but a mixed one — a few slides “printed” into the PDF as
images — passed that gate silently, and the empty pages in the result read as a broken
conversion rather than as a source with no text in it. The result now says how many pages
arrived without text and why only recognition can bring it back. - A paragraph was often broken into separate pieces. Where the source paragraph ends was
being guessed from the gaps between lines, and a guess is wrong often enough to be
noticed. It usually does not have to be guessed at all: a PDF written by Word, PowerPoint
or Acrobat carries the document structure with it — the standard has said so since
2008 — and in it the author has already marked where one paragraph ends and the next
begins. That mark is now read and believed. On a thirty-slide deck it takes the count of
separate text...
v1.17.9
iwo Helper Desktop v1.17.9
Added
- A start screen with two sections. The hub now asks for a section first — PDF or
Other tools — and shows the tools inside it. The window keeps one size on every screen so
it never jumps,Escand a “Back” button in the header return to the top, and “Home” inside a
tool comes back to its own section rather than the top screen, so hopping between PDF tools
still costs one click. Dropping PDFs onto the “PDF” card carries them inside: the header says
how many files are waiting and the next tool you pick opens with them. - “More operations” — a window of its own (PDF section). Six actions over a single document
that until now hid in a “More actions” menu inside Split, where nobody found them: compress,
convert to grayscale, repair a damaged file, save pages as images, extract the text to a
.txt, edit the document properties. Split keeps a one-click bridge that hands the open
document over, so nothing has to be opened twice. - Merge hands its result on. “☰ Menu → More operations” continues the work on the file you
have just saved — compress it, drop the colour, fix its properties — without hunting for it on
disk. Split has the same bridge for the document it has open, and both open the window even
when there is nothing to hand over yet: an entry that answers a click with an explanation of
why it does nothing reads as broken. PDF → Word deliberately has no bridge: it cannot name a
single PDF, its sources are many and its result is a.docx. - Compressing a single file is a real operation at last. Until now compression only existed
as an afterthought of merging and splitting. It writes a copy — sources are never modified —
and if the file is already optimized it says so instead of silently returning the same bytes. - The user guide ships inside the program. “About” has a new line, “User guide: open”, which
unpacks the document next to the settings and opens it. It works in the portable build too and
needs no internet, which is the whole point of an offline app. - The full-size preview can be minimized. The minimize box and a taskbar button of its own
come as a pair: the preview is modal, so a minimized window without a taskbar button could not
have been brought back at all.
Changed
-
“◀ Earlier” / “Later ▶” became “◀ Move left” / “Move right ▶”. A bare “Earlier” on a button
reads as “in the past”, not as an action. The grid is horizontal, the arrows are on the buttons
and the shortcuts areAlt+←/→, so the axis is what the eye follows. The tooltip stays ordinal
— “move the page one position earlier” — because at a row wrap “to the left” stops being true. -
“Excel Digest” is now “Merge Excel”, in a pair with “Merge PDF”. The result is still
called a digest: a digest is what merging workbooks produces. -
The language globe sits where the eye looks for it — centred against the title and the
subtitle instead of hanging above them. The position is computed from the real font heights,
so it stays centred at any display scale. -
“Document properties” was laid out again. The buttons overlapped the last field by a pixel
and the fields had three pixels between groups: the layout was computed from literals, while
WinForms sizes a single-line text box by its font and ignores the height you set. Everything is
measured now, the window says which file it edits, and it states that an empty field clears the
property. -
A card's contents stand in the middle of it. The icon, the title and the description were
pinned to the top of the card, so a short description left an empty strip at the bottom and the
card looked unfinished. The block is measured and centred now, with both texts laid out by the
same rules they are drawn with. -
Buttons say when they cannot be pressed. An unavailable ordinary button used to differ
from a working one by the colour of its caption alone, and in panels where half the buttons
wait for an open document that had to be found out by clicking. It is filled now, so the state
reads at a glance. The corner radius follows the height by one formula instead of a step at
36 px, the focus ring is solid rather than translucent so keyboard users can see where they
are, and a long caption is now cut with an ellipsis before it reaches the rounded corner. The
zoom bar of the full-size preview was the only place with square buttons and colours of its
own — it uses the same button as the rest of the app, in a variant for a dark background.
Fixed
- The page in the full-size preview no longer hides in the grey. Its position was computed in
the window's coordinates while the viewport was scrolled — WinForms keeps a child control in
content coordinates, so the origin drifted by the scroll on every zoom step and accumulated.
Enlarging or maximizing the window did not re-centre the page at all, and a stale scrollable
area left phantom scrollbars behind. All three are fixed, and the centring maths moved into a
pure function under unit tests. - The language chosen in the installer reaches the program on a reinstall. Setup used to
write the language straight intosettings.txtand only when that file did not exist yet, so
choosing English over an existing Russian installation changed nothing. It now hands the choice
over in a separate one-line file that the program applies once at startup and removes. Setup
never touchessettings.txt, which is what protected the non-ASCII paths inside it. - Ghostscript reporting success on a file it could not read. On a password-protected document
the engine exits with zero and still leaves a valid-looking two-kilobyte stub, which passed both
replacement policies: “Repair a damaged PDF” and “Convert to grayscale” answered with a green
“Done” and an empty document. The engine's own error marker in its error stream is what counts
now, not the exit code. - The preview's zoom bar at display scales above 100 %. The window is deliberately not
auto-scaled (its size is measured in physical pixels), so the bar stayed in fixed pixels while
the font grew with the screen: at 150 % every caption on it was clipped. The bar is measured
from the current scale now, and the window's minimum size comes from the bar's real width — the
“Print” button used to sit outside a window squeezed to its minimum. - “Check for updates” no longer swallows a browser that will not start. Answering “Yes” to
the new-version question opened the release page and, if the system had no browser to open it
with, did nothing at all — the failure was caught and dropped. The address is shown now, so the
page can be reached by hand. - Two button captions were being cut with an ellipsis. Split's “More operations” read “More
opera…” — the right-hand panel was 16 px too narrow, and it cannot grow downwards, since at the
window's minimum height a second row of buttons lands on the bottom strip. The panel is wider
now. The other one had shipped: the “Move after page N…” dialog sized its buttons by a constant
that was measured in the window's font, while the primary button is set larger and bold, so
“Переместить” needed 120 px in a 112 px button. Both buttons of that dialog are measured in
their own font now and grow with the caption. A test opens every window and every dialog and
fails on any caption that does not fit — clipping is silent, and the eye does not audit fifty
buttons. - Gaps between the buttons of the right-hand panels differed between Merge and PDF → Word. They
follow one rhythm now.
Documentation
- The user guide matches the program again (
docs/Инструкция пользователя.docx, also shipped
inside the exe). All 26 figures are fresh captures of the real 1.17.9 windows: the two-level
start screen, the “More operations” window and its resolution menu are new, and the “More
actions” menu that no longer exists is gone. The text follows: five tools instead of four, the
chapter order of the start screen (PDF first, Excel behind it), a chapter of its own for “More
operations”, the renamed buttons, and the new lines in About and in the troubleshooting table.
The build now also checks that every caption the guide quotes actually exists in the program's
catalog — it is what caught “Раньше”, “Позже”, “Доп. действия” and “Свод Excel”.
Files: iwoHelperDesktop-1.17.9.exe / iwoHelperDesktop-1.17.9-x86.exe - portable (single file, 64-bit / 32-bit); iwoHelperDesktop-setup-1.17.9.exe / iwoHelperDesktop-setup-1.17.9-x86.exe - installers with bundled Ghostscript (per-user install, no administrator rights). Take x64 unless your Windows is 32-bit.
v1.17.8
iwo Helper Desktop v1.17.8
Added
- Printing, on every PDF screen. A “Print” button on Merge, Split and PDF → Word prints the
pages you selected, or all of them if you selected none, and the full-size preview has one too
alongside its right-click entry. Pages are rendered at 200 dpi and fitted into the sheet whole
and centred — stretching a page to the edges would crop the margins, which is where signatures
and page numbers live — and a rotation you set in the grid reaches the paper as well. - Zoom and pan in the full-size preview. The page you open by double-clicking a tile now
has a magnifier: − / + buttons,Ctrl+wheel, a “fit to window” button andCtrl+0for actual
size. Zooming with the wheel keeps the point under the cursor in place — you magnify what you
are looking at, not the middle of the page — and once the page is larger than the window you
drag it with the hand cursor.Escand the close button close it. - Assemble a double-sided scan (Merge → menu). For a scanner that takes one side at a time:
scan the stack face up, flip it, scan again, add both files and use this item. The app asks
whether the second file came out in reverse and lays the pages out as 1, 2, 3, 4… A single
Ctrl+Zputs the order back. - Save pages as images (Split → “More with this document”): PNG or JPEG at 96, 150, 300 or
600 dpi, either the selected pages or all of them. The resolution is applied to each page's
real paper size, so a landscape insert is not stretched. JPEG is written at quality 90 rather
than the default 75, which shows up as rings around letters on scans. - Extract the text layer to a .txt (Split → “More with this document”). Tables are kept: the
analysis moves table words out of the paragraph stream, so a naive dump would lose them
entirely — cells come out separated by tabs and paste into a spreadsheet as a table. Pages are
separated by a form feed, aspdftotextdoes, and the file is UTF-8 with a byte-order mark so
Notepad shows Cyrillic correctly. - Name the split parts yourself (Split → “How to name the parts”). Right-clicking the field
inserts the available keywords:[BASENAME],[FILENUMBER],[CURRENTPAGE],[BOOKMARK],
[TIMESTAMP]. Hashes pad with zeros ([FILENUMBER###]→001) and a number offsets the
count ([FILENUMBER10]→11). The field is optional on purpose: left empty, the parts get
exactly the names they got before, so a new capability does not rename anyone's files. - Print on both sides without a document starting on a back (Merge → “Add a blank page”): a
blank page is added after a document with an odd page count so the next one starts on the
front of a sheet. The last document is deliberately not padded — nothing is printed after
it. The blanks are added when the file is written, not kept in the page grid: putting them
in the model would mean drawing them as tiles, carrying them through the clipboard and undo
and forbidding them in PDF → Word, which is a lot of risk for a print-time detail. - Edit document properties — title, author, subject, keywords (Split → “More with this
document”). Clearing a field removes the property, which is how an author's name is taken
out of a file before sending it. The result is written to a new file. - Select odd or even pages from the page grid's context menu — the two sides of a
double-sided stack, so rotating or deleting one side no longer means ticking fifty tiles. - Convert to grayscale and repair a damaged PDF (Split → “More with this document”).
Repair rewrites the file through the PDF engine, which is what fixes a broken cross-reference
table — the usual “this file is damaged”. It picks the file with its own dialog, because a
damaged document cannot be opened into the grid in the first place, and that is exactly when
it is needed. Both write a new file: the app never modifies a source.
Changed
- The extra tools are reachable from a button called “More actions…”, sitting with the other
inputs in Split, and it opens downwards instead of over the top of the window. Five
capabilities behind a hamburger submenu were, in practice, invisible; that submenu is gone,
so there is one list and one way to reach it. - The in-app instructions match the app again — they now describe printing, the extra
actions, the part-name template, interleaving and double-sided padding. - Changing the language no longer throws every window at you. Rebuilding the windows in the
new language used to bring each of them to the front and restore the minimized ones. Only the
window you were working in comes forward now; the rest update where they stand. - Everything that writes a result beside a source now refuses to write over it. The app
does not modify sources, and writing a file into itself would have damaged it as well — the
source is open for reading at that moment. - The compression levels name their resolution — “Good — smaller size (150 dpi)” instead of
“Good — smaller size”. The number comes from the same place the engine arguments do, so the
label cannot promise one thing while the engine does another. - The shared Ghostscript pipeline (run, validate, replace only on success, restore the original
on any failure) is now one piece of code used by compression and by both new conversions. They
differ only in arguments and in when a replacement is allowed: compression replaces the file
only if it got smaller, while grayscale and repair apply whenever the result is sound. - One file-name sanitiser instead of two that had drifted apart. The surviving one also trims
trailing dots and caps the length, which protects split-by-bookmark names from the path-length
limit. - The description in “About” is justified, the way a paragraph of body text is set, and it is
still selectable so the text can be copied.
Fixed
- A minimized start screen was lost when the language changed. Windows are rebuilt in the new
language on the spot they occupied, but a minimized window reports a position far outside every
screen (-32000, -32000) and that position was copied onto the new start screen. It came back as
an ordinary window parked past the edge of the desktop: listed in the taskbar, absent from the
screen, and “Home” appeared to do nothing at all. This happened from any of the four tools, not
just one. Placement is now read and applied exactly the way the app already stored it between
runs — restored size and position together with the window state — so a minimized window stays
minimized and comes back where it was. That rule lives in one place instead of two that had
drifted apart, and a test drives a real rebuild with the start screen minimized.
Files: iwoHelperDesktop-1.17.8.exe / iwoHelperDesktop-1.17.8-x86.exe - portable (single file, 64-bit / 32-bit); iwoHelperDesktop-setup-1.17.8.exe / iwoHelperDesktop-setup-1.17.8-x86.exe - installers with bundled Ghostscript (per-user install, no administrator rights). Take x64 unless your Windows is 32-bit.
v1.17.7
iwo Helper Desktop v1.17.7
Fixed
- The MIT licence text was damaged. One line of the permission grant read “to permit
persons a side the Software is furnished to do so” instead of “to permit persons to
whom the Software is furnished to do so”, in both the repository licence and the copy
shown by the installer. GitHub could not recognise the file as MIT because of it. The
canonical wording is restored in both files, verbatim. - Closing a PDF window could hang for two seconds and leak memory. The thumbnail
renderer is asked to stop through a signal, and the render thread could clear that signal
in the same instant it arrived — after which it waited forever. The window then sat out
its two-second timeout on close, and the renderer, which holds a full in-memory copy of
every PDF it has open, was never released for the rest of the session. - A window busy reading a PDF lost its work when the language changed. Only a running
operation counted as “busy”, so switching language while a large or network PDF was still
being read closed the window mid-read. The freshly opened one came up empty, with nothing
said about the file that had been loading. - The Excel Digest window broke when dragged to its smallest size. “Uncheck all” ended
up below the bottom edge of the window and “Check all” disappeared underneath “Retry
skipped” — and that broken size was then remembered between runs. The minimum height is
now derived from the actual layout instead of a constant that had drifted away from it. - Every tool window opened with the focus on “Home”, so pressing Enter right after
opening one returned to the start screen without doing anything. The header really is last
in the tab order now, and the focus lands on the first useful control. - The window header was clipped from 125% display scaling upwards. Title and subtitle
were drawn into fixed-height boxes while their fonts grow with the scale, slicing off the
bottom of the letters. Both rows are measured from the fonts now. - Merging with compression looked frozen. The bar reached 100%, Cancel disappeared, and
the window then sat still for the whole compression run. Compression now names itself in
the status line and shows a moving bar, since its progress cannot be measured. - Long messages ran off the edge of the Excel Digest window, cut mid-word with no
ellipsis. Both lines now shorten with “…” and show the full text on hover, as the PDF
tools already did. - A list item numbered with a non-ASCII digit silently lost its number when written to
Word. - Enter did nothing in PDF Split while it started the action in the other two PDF tools,
and “Combine into one file” stayed clickable during a split. - Checking for updates gave no sign of life: the button stayed lit through a request
that can take ten seconds, and repeated clicks stacked up identical error dialogs. - “About” and the page-number prompts showed a generic window icon, unlike every other
dialog. - The language globe on the start screen could not be reached from the keyboard, and would
have been invisible on Windows 8.1, whose icon font does not have it — it now falls back to
the flag of the current language and answers Enter and Space.
Changed
- Window position memory is wired in one place. Windows used to restore and save their
bounds through a pair of overrides each, which is easy to half-remove without noticing.
They now attach it with a single call, and a test opens each of those windows for real to
prove the memory still works — a silent loss of it would otherwise go unnoticed. - The shared parts really are shared now. The dialog frame, the rounded-rectangle
outline, “select all rows”, the PDF file picker and the “operation finished” epilogue each
lived in three or four copies that had begun to drift apart — one was missing the window
icon, another the guard against a degenerate corner radius. - The taskbar progress object is released deterministically, like every other COM object in
the app, and process handles are closed at the six places that open a file or a folder.
Testing
- Windows are opened for real and squeezed to their minimum size, with every control checked
for staying inside the window and no two buttons overlapping; the tab order of each tool
window is checked the same way. Both layout defects above were caught by these checks
before they were fixed. - Twelve new checks cover logic that had none: the median behind every PDF layout threshold,
the X-Y cut tree the header tables are built from, the missing-key fallback of the string
catalog, the compression labels, cancellation, the screen chosen when restoring a window,
the UI-thread delivery guard, and the rule that keeps a chosen language from being
overwritten by a stale window. - Two checks that could never fail were repaired: one compared two nulls, the other kept its
only assertion inside a loop that an empty result skipped entirely. - The runner refuses to pass if the number of checks drops, so a deleted one cannot slip by.
- Continuous integration installs Ghostscript before running the checks, so the
compression round-trip is actually exercised instead of silently skipped; it builds the
checks for the architecture under test (the 32-bit branches had never been run); and the
thumbnail check now reports “nothing was rendered” as a failure instead of success.
Files: iwoHelperDesktop-1.17.7.exe / iwoHelperDesktop-1.17.7-x86.exe - portable (single file, 64-bit / 32-bit); iwoHelperDesktop-setup-1.17.7.exe / iwoHelperDesktop-setup-1.17.7-x86.exe - installers with bundled Ghostscript (per-user install, no administrator rights). Take x64 unless your Windows is 32-bit.
v1.17.6
iwo Helper Desktop v1.17.6
Added
- Rotate a page while previewing it. Right‑click the full‑size preview (double‑click a
tile to open it) for “rotate right / left 90°”, the same Ctrl+Shift+“+” / “−” as in the
grid. The thumbnail follows immediately and the rotation joins the undo history, so
Ctrl+Z takes it back like any other change. - The preview remembers its size. The full‑size preview reopens at the size and
position you left it, maximised included, restored safely onto a visible screen.
Fixed
- The installer stayed English after Russian was chosen. Setup remembered the language
of the previous installation and let it override the system language, and the restart
that applies a newly chosen language never happened because Setup cannot launch its own
file while it is running. Setup now follows the system language, hands the restart to the
command processor, and says so instead of staying silent if that restart fails. The
choice on the flag screen becomes the app language even in that case, and the picker's
buttons no longer share a value with “dialog closed”, which used to read as a choice. - A language switch left a folder behind in
%TEMP%. The instance being replaced ends
abruptly, which skips Setup's own cleanup, so its temporary folder now gets removed
right after it exits. - Right‑clicking the preview closed it. The click that opened the context menu also
reached the close handler, because in Windows Forms a plain click event fires for the
right button too. - Launching the app twice started a second process. A second launch now wakes the
running one and brings its window back instead of adding another entry to Task Manager.
Tool windows stay independent of the hub exactly as before.
Changed
- Result messages name the compression resolution. “Pages saved: 12 · compressed,
images to 150 dpi” instead of a bare “compressed”, so it is clear what changed. Extracted
pages are counted too, and the punctuation of these lines is assembled in one place. - Clearer drag‑and‑drop wording. Every hint uses the imperative “drag it onto the
program window” and names the drop target, following the Microsoft terminology. - The About window is readable and copyable. The description can be selected and
copied, it states that only born‑digital PDFs convert to Word (scans are not supported
yet), and the copyright with the licence moved to the bottom‑left corner.
Files: iwoHelperDesktop-1.17.6.exe / iwoHelperDesktop-1.17.6-x86.exe - portable (single file, 64-bit / 32-bit); iwoHelperDesktop-setup-1.17.6.exe / iwoHelperDesktop-setup-1.17.6-x86.exe - installers with bundled Ghostscript (per-user install, no administrator rights). Take x64 unless your Windows is 32-bit.