import java.io.FileOutputStream; import com.itextpdf.text.Document; import com.itextpdf.text.pdf.PdfCopy; import com.itextpdf.text.pdf.PdfImportedPage; import com.itextpdf.text.pdf.PdfReader; /** * See * http://stackoverflow.com/questions/5736675/itext-split-a-pdf-into-several-pdf-1-per-page * * Pdf to image: * http://stackoverflow.com/questions/4886042/pdf-to-image-using-java * * Display PDF into flash:http://www.swftools.org/ * http://stackoverflow.com/questions/580807/how-can-i-show-doc-or-rtf-or-pdf-in-flash-player-or-in-none-editble-format * * Display PDF in html5 * https://github.com/mozilla/pdf.js * http://www.pdftron.com/pdfnet/webviewer/demo.html * * http://stackoverflow.com/questions/3113334/is-there-any-way-to-embed-a-pdf-file-into-an-html5-page * * pdf.js: Rendering PDF with HTML5 and JavaScript * http://andreasgal.com/2011/06/15/pdf-js/ * http://habrahabr.ru/post/122034/ * * google on * html5 view PDF * */ public class PdfIntoPagesMain { public static void main(String[] args) { try { //String inFile = args[0].toLowerCase(); String inFile = "book1/book1.pdf"; System.out.println ("Reading " + inFile); PdfReader reader = new PdfReader(inFile); int n = reader.getNumberOfPages(); System.out.println ("Number of pages : " + n); int i = 0; while ( i < n ) { String outFile = inFile.substring(0, inFile.indexOf(".pdf")) + "-" + String.format("%03d", i + 1) + ".pdf"; System.out.println ("Writing " + outFile); Document document = new Document(reader.getPageSizeWithRotation(1)); PdfCopy writer = new PdfCopy(document, new FileOutputStream(outFile)); document.open(); PdfImportedPage page = writer.getImportedPage(reader, ++i); writer.addPage(page); document.close(); writer.close(); } } catch (Exception e) { e.printStackTrace(); } /* example : java SplitPDFFile d:\temp\x\tx.pdf Reading d:\temp\x\tx.pdf Number of pages : 3 Writing d:\temp\x\tx-001.pdf Writing d:\temp\x\tx-002.pdf Writing d:\temp\x\tx-003.pdf */ } }
Общее·количество·просмотров·страницы
Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи
пятница, 31 августа 2012 г.
Разбивка PDF на страницы
Исходник говорит сам за себя:
понедельник, 27 февраля 2012 г.
OpenMQ database persistence in Glassfish
JMS-провайдер в сервере Glassfish является OpenMQ - сановская (а теперь оракловая) разработка с открытым исходным кодом.
По-умолчанию, OpenMQ записывает данные в файлы. Это не всегда хорошо, я столкнулся с тем, что при вырубании Глассфиша по kill -9 PID файловое хранилище OpenMQ портится и с восстановлением сообщений в очередях и топиках возникают проблемы. Поэтому имеет смысл рассмотреть переход на хранение сообщений в СУБД. Мы рассмотрим MySQL.
Пусть директория, в которую установлен Глассфиш обозначается как GLASSFISH_HOME. Тогда нужно отредактировать файл с настройками OpenMQ: GLASSFISH_HOME/glassfish/domains/domain1/imq/instances/imqbroker/props/config.properties. Добавим в него следующие строки:
./imqdbmgr create all -b imqbroker
и получаем следующие таблицы в БД:
imq.brokerid=imqbroker imq.persist.store=jdbc imq.persist.jdbc.dbVendor=mysql imq.persist.jdbc.mysql.property.url=jdbc:mysql://localhost:3306/mqdb imq.persist.jdbc.mysql.createdburl=jdbc:mysql://localhost:3306/mqdb imq.persist.jdbc.mysql.needpassword=true imq.persist.jdbc.mysql.user=USERNAME imq.persist.jdbc.mysql.password=PASSWORDТаким образом, мы настроили сохранение JMS-данных в БД. Нужно еще положить JAR-файл с драйвером БД (mysql-connector-java-5.1.17-bin.jar) в каталог GLASSFISH_HOME/mq/lib/ext. Теперь создадим БД. Для этого воспользуемся утилитой imqdbmgr, которая находится в каталоге GLASSFISH_HOME/mq/bin. Пишем команду:
./imqdbmgr create all -b imqbroker
и получаем следующие таблицы в БД:
MQBKR41Simqbroker MQCON41Simqbroker MQCONSTATE41Simqbroker MQCREC41Simqbroker MQDST41Simqbroker MQJMSBG41Simqbroker MQMSG41Simqbroker MQPROP41Simqbroker MQSES41Simqbroker MQTMLRJMSBG41Simqbroker MQTXN41Simqbroker MQVER41SimqbrokerТеперь можно запускать сам Глассфиш - сохранение JMS-данных пойдет в БД, а не в файлы. Когда создавалась БД, я столкнулся с одной проблемой. Дело в том, что у меня в MySQL кодировкой по умолчанию является UTF-8. Это проблема для OpenMQ, т.к. при создании таблицы MQTMLRJMSBG41Simqbroker появляются ошибки. Но эта проблема решается очень просто - для этого для данной Бд нужно объявить кодировку latin1: ALTER DATABASE mqdb DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci; Тогда все пройдет без ошибок. Полезные ссылки: OpenMQ, the Open source Message Queuing, for beginners and professionals (OpenMQ from A to Z) Browse OpenMQ source code Oracle GlassFish Message Queue 4.4.2 Technical Overview Oracle GlassFish Message Queue 4.4.2 Administration Guide
среда, 18 января 2012 г.
Доступ к Wikipedia на время действия экрана SOPA
Википедия сегодня, 18 Января 2011 года, протестует против SOPA и закрыла доступ к контенту.
Но при желании можно все равно этот контент посмотреть.
Википедия никуда не убрала контент, она просто добавила на каждую страничку новый div, который и содержит слой с информацией про протест против SOPA. А также добавила стиль display=none к слоям с контентом.
Все это дело легко отключается следующим скриптом (я написал его за 1-2 минуты), который выполняется из консоли Chrome или Firefox:
var jq = document.createElement('script'); jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"; document.getElementsByTagName('head')[0].appendChild(jq); $('#mw-sopaOverlay').remove(); $('#content').show();Все элементарно: первые три строчки подключают jquery, 4-я строчка удаляет слой SOPA, 5-я строчка показывает слой с контентом. Можно этот скрипт повесить на Greasemonkey, и тогда автоматически вся википедия будет нормально показываться, как и прежде. И да, я поддерживаю их протест против SOPA. Просто иногда нужно срочно получить информацию, даже если она скрыта.
Подписаться на:
Сообщения (Atom)