Dynamically Paginating .epub files in UIWebView - ios

I am loading files from an .epub into UIWebViews for display. At the moment, the .epub is divided into individual files for each chapter. To display the chapters, I am just loading these files into UIWebView. I am trying to figure out how to break these down into pages depending on font size, styling, etc. It's proving difficult, as iOS only accesses the UIWebView content indirectly. Is there a standard method for breaking it up?
I'm thinking about grabbing full chapter content out of a page with JS, then breaking each chapter down into pages based on line length and lines per page, but that seems sort of crazy, and I'm having trouble returning it to a UIWebView as valid html or javascript code. (The text contains single quotes, etc.)

Use UIWebView Pagination :)
myWebView.paginationMode = UIWebPaginationModeLeftToRight;
myWebView.paginationBreakingMode = UIWebPaginationBreakingModePage;
myWebView.gapBetweenPages = 50;
For font scaling, you need to inject css thru javascript for webkit's font scaling property
http://css-infos.net/property/-webkit-text-size-adjust

Related

Managing page breaks on PDF document generated through HTML [iOS]

I am trying to create a PDF using HTML content. Everything is fine but i have one problem where the page breaks on PDF get inserted between content and cause it to divide between pages.
Example:
A portrait image with height>width get a page break half way in between and causes half image to be on page 1 and the other half to be on page 2. This is just an example, the content on my PDF is dynamic, meaning the user has control over generating amount of content. Therefore its not necessary that image be always on page 1 it could be anywhere on the document.
I have tried to search for some libraries also but as per my understanding of how PDF files are rendered in iOS, I don't have any clue how to manage content that gets divided due to the page breaks.
Platform: iOS 10, xcode 8, Objective-C
Try to add something like the following to your css.
img {
page-break-inside:avoid
}
See also:
Print styles: How to ensure image doesn't span a page break

how are keynote file(.key, .key.zip) and pdf file loaded on UIWebView

After I loaded ppt on UIWebView, in
func webViewDidFinishLoad(webView: UIWebView) {
let html = webView.stringByEvaluatingJavaScriptFromString("document.documentElement.outerHTML")
}
I got the whole HTML for the ppt file.
But after I loaded .key or .pdf, the HTML is empty! So how are them loaded on UIWebView. Anyway I could get or set the content after I loaded them like ppt?
When you load a PDF document using UIWebView, you see in essence an image of the pages laid out in a scroll view. There is no HTML involved.
You ask about the "content" of the documents, but that does not really have a meaning in PDF. Think of a PDF documents as a set of instructions for drawing shapes, images and glyphs onto the screen.
As far as PDF is concerned, there is no such thing as a word, a paragraph, a heading and so on. And therefore, there isn't really such a thing as "content" in the same way as there is in an HTML page.
There are some libraries that try to recover structure from PDF, and the UIWebView uses one under the hood, at least to discover lines, words, paragraphs and columns, buy it is not accessible from the API, and therefore you cannot use it.

html5/css3, Asp.net MVC3 - View pdf in an html page on mobile safari

My upcoming mobile web project requires viewing dynamically chosen pdf files inside the webpage. I am using iFrame to display the pdf file and the file can be scrolled using two-finger scrolling. But the problems I am facing are:
The first page of the file is not displayed completely on the iPad and gets cut off along the width unlike when I view it on the desktop browsers where the first page of the pdf is always entirely displayed although zoomed out to fit in the iFrame area.
There is no visual indication for the users that the pdf document can be scrolled, i.e., there is no scroll bar on the pdf document.
The controls (page navigation, zoom etc.) for the pdf viewer (Adobe reader) don't appear on the document unlike when I see it on the desktop browsers.
What is the best way to achieve what I am trying to do? Do any of you experts know any solutions/workarounds to the problems I am facing? An entirely different approach using anything other than iFrame can also be considered.
The reason why the pdf should be inside the html page is that, the list of pdf files will be on a menu bar on the left side of the page and the user can click on any of them to view on the same page. Ideally, they will have the capability to toggle between full screen view and that view.
Any help is appreciated.
I created a tiny JavaScript module that helps you to show a PDF inline and be able to scroll it. But I also couldn't figure out a way to make it fit the total width of the parent container.
Check it out: https://github.com/williamrjribeiro/ipdf-scroll
Cheers.
I came across this Recommended way to embed PDF in HTML? while researching on the web to find an answer.
The mentioned link discusses about some options that I can use and the google document viewer works for me though don't know if there is anything (like data limit) I need to be aware of before using it on the website. Also I have no idea if it is a good solution (though the full screen mode is not available, but zoom-in/zoom-out and next/prev page buttons are there are show up in the mobile safari on the iPad) to use for an web app that will be run on the iPad.
Anyway, I will keep researching for a better solution and if i don't find any, I'll stick to the google document viewer.
The issue appears to be a bug with Safari on the IPad.
I didn't find a solution for embedding the pdf in html but I did find this:
If you return FileStreamResult from your controller action instead of a view, the pdf will open in a new tab, it's not embedded html but at least your user is not having to download files and open them manually.
I had the same problem of the pdf not being displayed completely. The only thing I found to fix this was the change the size of the div containing the pdf.
For example if the element containing the pdf is a div then I change its width to any value and the rollback to the value it had before. Changing Width or height any one works.
Sometimes I had to wait a little using a setTimeout before calling my resizable method

Best way to link images to text so that localization keeps things spaced properly?

I've got an app with a big 'help' page that describes how to use it. This page features a lot of text with some embedded images. Is there some way to 'link' or attach these images to the bottom of specific text boxes so things will lay out reasonably well for any localization we do? In other words, if the French translation of a block of text ends up being two lines longer than the English equivalent, I'd like the image that's placed below that text to be pushed downward by the appropriate amount without having to re-edit the layout of of the .xib file manually. Possible?
You can make HTML page. You can place any thing after your text and can do modification. As it is HTML page it can easily wrap and auto adjust itself. And show the html page in your webview by saving the HTML page in your local data storage

How to zoom content in UIWebView when content is scaled for (iphone)-width

A lot of webpages today, have meta tags or CSS styles, which defines the content width to 320px.
When you load one of these pages in an UIWebView it is not possible to pinch-to-zoom.
(You can try it in the Safari-browser on the iPhone).
As a visual impaired person, I find that very annoying.
Is there anyway to enable pinch-to-zoom for these kind of pages?
Can I in anyway remove those tags/styles?
Can I in some way manually code some mechanism in an UIWebView, which could emulate this functionality?
Any help would be appreciated.
Thank you.
You could load the HTML file that you are going to display in your UIWebView into an NSString, then use a regex to remove the viewport meta tag (which is what I believe disables the zooming), and then load the new NSString into the UIWebView.

Resources