Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (101)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (309)
Collections:
Other Resources:
What Is poi-scratchpad-5.2.3.jar?
What Is poi-scratchpad-5.2.3.jar?
✍: FYIcenter.com
poi-scratchpad-5.2.3.jar is one of the JAR files for Apache POI 5.2.3, which provides an API for Microsoft document files of Word, Excel, PowerPoint, and Visio.
poi-scratchpad-5.2.3.jar provides support for older versions of Microsoft document files like Word 97, Excel 97, PowerPoint 97, etc.
poi-scratchpad-5.2.3.jar is distributed as part of the poi-bin-5.2.3-20220909.zip download file.
JAR File Size and Download Location:
JAR name: poi-scratchpad-5.2.3.jar Target JDK version: 9 Dependency: poi.jar File name: poi-scratchpad.jar, poi-scratchpad-5.2.3.jar File size: 1897121 bytes Release date: 09-09-2022 Download: Apache POI Website
Here are Java Source Code files for poi-scratchpad-5.2.3.jar:
⏎ org/apache/poi/hpbf/model/qcbits/QCPLCBit.java
/* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ package org.apache.poi.hpbf.model.qcbits; import org.apache.poi.util.IOUtils; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.StringUtil; /** * A "PLC " (PLC) based bit of Quill Contents. The exact * format is determined by the type of the PLCs. */ public abstract class QCPLCBit extends QCBit { private static final int MAX_NUMBER_OF_PLCS = 1000; private final int numberOfPLCs; private final int typeOfPLCS; /** * The data which goes before the main PLC entries. * This is apparently always made up of 2 byte * un-signed ints.. */ private int[] preData; /** The first value of each PLC, normally 4 bytes */ private long[] plcValA; /** The second value of each PLC, normally 4 bytes */ private long[] plcValB; private QCPLCBit(String thingType, String bitType, byte[] data) { super(thingType, bitType, data); // First four bytes are the number numberOfPLCs = (int)LittleEndian.getUInt(data, 0); if (numberOfPLCs < 0) { throw new IllegalArgumentException("Invalid number of PLCs: " + numberOfPLCs); } // Next four bytes are the type typeOfPLCS = (int)LittleEndian.getUInt(data, 4); // Init the arrays that we can IOUtils.safelyAllocateCheck(numberOfPLCs, MAX_NUMBER_OF_PLCS); plcValA = new long[numberOfPLCs]; plcValB = new long[numberOfPLCs]; } public int getNumberOfPLCs() { return numberOfPLCs; } public int getTypeOfPLCS() { return typeOfPLCS; } public int[] getPreData() { return preData; } public long[] getPlcValA() { return plcValA; } public long[] getPlcValB() { return plcValB; } final void setPreData(int[] preData) { this.preData = preData.clone(); } final void setPlcValA(long[] plcValA) { this.plcValA = plcValA.clone(); } final void setPlcValB(long[] plcValB) { this.plcValB = plcValB.clone(); } public static QCPLCBit createQCPLCBit(String thingType, String bitType, byte[] data) { // Grab the type int type = (int)LittleEndian.getUInt(data, 4); switch(type) { case 0: return new Type0(thingType, bitType, data); case 4: return new Type4(thingType, bitType, data); case 8: return new Type8(thingType, bitType, data); case 12: // 0xc return new Type12(thingType, bitType, data); default: throw new IllegalArgumentException("Sorry, I don't know how to deal with PLCs of type " + type); } } /** * Type 0 seem to be somewhat rare. They have 8 bytes of pre-data, * then 2x 2 byte values. */ public static class Type0 extends QCPLCBit { private Type0(String thingType, String bitType, byte[] data) { super(thingType, bitType, data); // Grab our 4x pre-data int[] preData = { LittleEndian.getUShort(data, 8 + 0), LittleEndian.getUShort(data, 8 + 2), LittleEndian.getUShort(data, 8 + 4), LittleEndian.getUShort(data, 8 + 6) }; setPreData(preData); // And grab the 2 byte values int cntPlcs = getNumberOfPLCs(); long[] plcValA = new long[cntPlcs]; long[] plcValB = new long[cntPlcs]; for(int i=0; i<cntPlcs; i++) { plcValA[i] = LittleEndian.getUShort(data, 16+(4*i)); plcValB[i] = LittleEndian.getUShort(data, 16+(4*i)+2); } setPlcValA(plcValA); setPlcValB(plcValB); } } /** * Type 4 is quite common. They have 8 bytes of pre-data, * then 2x 4 byte values. */ public static class Type4 extends QCPLCBit { private Type4(String thingType, String bitType, byte[] data) { super(thingType, bitType, data); // Grab our 4x pre-data int[] preData = { LittleEndian.getUShort(data, 8 + 0), LittleEndian.getUShort(data, 8 + 2), LittleEndian.getUShort(data, 8 + 4), LittleEndian.getUShort(data, 8 + 6) }; setPreData(preData); // And grab the 4 byte values int cntPlcs = getNumberOfPLCs(); long[] plcValA = new long[cntPlcs]; long[] plcValB = new long[cntPlcs]; for(int i=0; i<cntPlcs; i++) { plcValA[i] = LittleEndian.getUInt(data, 16+(8*i)); plcValB[i] = LittleEndian.getUInt(data, 16+(8*i)+4); } setPlcValA(plcValA); setPlcValB(plcValB); } } /** * Type 8 is quite common. They have 14 bytes of pre-data, * then 2x 4 byte values. */ public static class Type8 extends QCPLCBit { private Type8(String thingType, String bitType, byte[] data) { super(thingType, bitType, data); // Grab our 7x pre-data int[] preData = { LittleEndian.getUShort(data, 8 + 0), LittleEndian.getUShort(data, 8 + 2), LittleEndian.getUShort(data, 8 + 4), LittleEndian.getUShort(data, 8 + 6), LittleEndian.getUShort(data, 8 + 8), LittleEndian.getUShort(data, 8 + 10), LittleEndian.getUShort(data, 8 + 12) }; setPreData(preData); // And grab the 4 byte values int cntPlcs = getNumberOfPLCs(); long[] plcValA = new long[cntPlcs]; long[] plcValB = new long[cntPlcs]; for(int i=0; i<cntPlcs; i++) { plcValA[i] = LittleEndian.getUInt(data, 22+(8*i)); plcValB[i] = LittleEndian.getUInt(data, 22+(8*i)+4); } setPlcValA(plcValA); setPlcValB(plcValB); } } /** * Type 12 holds hyperlinks, and is very complex. * There is normally one of these for each text * area that contains at least one hyperlinks. * The character offsets are relative to the start * of the text area that this applies to. */ public static class Type12 extends QCPLCBit { private final String[] hyperlinks; private static final int oneStartsAt = 0x4c; private static final int twoStartsAt = 0x68; private static final int threePlusIncrement = 22; private Type12(String thingType, String bitType, byte[] data) { super(thingType, bitType, data); int cntPlcs = getNumberOfPLCs(); // How many hyperlinks do we really have? // (zero hyperlinks gets numberOfPLCs=1) hyperlinks = new String[data.length == 0x34 ? 0 : cntPlcs]; // We have 4 bytes, then the start point of each // hyperlink, then the end point of the text. int[] preData = new int[1 + cntPlcs + 1]; for(int i=0; i<preData.length; i++) { preData[i] = (int)LittleEndian.getUInt(data, 8+(i*4)); } setPreData(preData); // Then we have a whole bunch of stuff, which grows // with the number of hyperlinks // For now, we think these are shorts int at = 8+4+(cntPlcs*4)+4; int until = 0x34; if(cntPlcs == 1 && hyperlinks.length == 1) { until = oneStartsAt; } else if(cntPlcs >= 2) { until = twoStartsAt + (cntPlcs-2)*threePlusIncrement; } long[] plcValA = new long[(until - at) / 2]; long[] plcValB = new long[0]; for(int i=0; i<plcValA.length; i++) { plcValA[i] = LittleEndian.getUShort(data, at+(i*2)); } setPlcValA(plcValA); setPlcValB(plcValB); // Finally, we have a series of lengths + hyperlinks at = until; for(int i=0; i<hyperlinks.length; i++) { int len = LittleEndian.getUShort(data, at); int first = LittleEndian.getUShort(data, at+2); if(first == 0) { // Crazy special case // Length is in bytes, from the start // Hyperlink appears to be empty hyperlinks[i] = ""; at += len; } else { // Normal case. Length is in characters hyperlinks[i] = StringUtil.getFromUnicodeLE(data, at+2, len); at += 2 + (2*len); } } } /** * Returns the number of hyperlinks, which should * either be zero, or the number of PLC bits */ public int getNumberOfHyperlinks() { return hyperlinks.length; } /** * Returns the URL of the hyperlink at the * given index. * @param number The hyperlink number, zero based */ public String getHyperlink(int number) { return hyperlinks[number]; } /** * Returns where in the text (in characters) the * hyperlink at the given index starts * applying to. * This position is relative to the text area that this * PLCBit applies to. * @param number The hyperlink number, zero based */ public int getTextStartAt(int number) { return getPreData()[1+number]; } /** * Returns where in the text that this block * of hyperlinks stops applying to. Normally, * but not always the end of the text. * This position is relative to the text area that this * PLCBit applies to. */ public int getAllTextEndAt() { return getPreData()[getNumberOfPLCs()+1]; } } }
⏎ org/apache/poi/hpbf/model/qcbits/QCPLCBit.java
Or download all of them as a single archive file:
File name: poi-scratchpad-5.2.3-src.zip File size: 1238744 bytes Release date: 2022-09-09 Download
⇒ What Is poi-examples-5.2.3.jar?
⇐ What Is poi-excelant-5.2.3.jar?
2017-03-22, 34407👍, 0💬
Popular Posts:
How to download and install JDK (Java Development Kit) 8? If you want to write Java applications, yo...
Jackson is "the Java JSON library" or "the best JSON parser for Java". Or simply as "JSON for Java"....
What Is mail.jar of JavaMail 1.4? I got the JAR file from javamail-1_4.zip. mail.jar in javamail-1_4...
How to download and install Apache XMLBeans Source Package? The source package contains Java source ...
JDOM provides a solution for using XML from Java that is as simple as Java itself. There is no compe...