Before aggregation - incorrect values
Hello,
I am using Calculated Key Figure with time of aggregation calculation = "before aggregation" and then I use this CKF in columns. Some rows are calculated correctly, but some of them are not. And when I check the key figure definition for those incorrect in monitor query I can see the way how it is calculated and everything seems to be OK in the row 1 (picture) , but in row 2 the value is incorrect.
<a href="http://raisik.webz.cz/key_fig1.JPG">http://raisik.webz.cz/key_fig1.JPG</a>
Any idea why?
Thanks for any help.
Regards
Pavel
Hi Agrima,
Check here.....
http://help.sap.com/saphelp_nw04/helpdata/en/6f/56853c08c7aa11e10000000a11405a/content.htm
Thanks,
Vijay.
Similar Messages
-
Exception Aggregation (Average) displaying incorrect values after EHP1 Upgr
Hi All,
Exception Aggregation (Average) displaying incorrect values after EHP1 Upgrade in our BW system
We have recently upgraded the system to EHP1. After the upgrade some of the queries where we are using Exception Aggregation (Average) started giving the incorrect values.
Eg. We are displaying three Key Figures KF1, KF2 and KF3 (=KF1 %A KF2) against Store Hierarchy. In KF3 we are using Exception Aggregation (Average) on a characteristic 0PLANT.
There are 14 rows against 0PLANT and out of those 2 rows are blank for KF1, so for KF3. When it is calculating the average of these key figures its dividing the total value by 12 instead of 14 which is not correct in our case. Earlier it was dividing the total by 14.
So in this case 'Average' and "Average of all values <>0" are behaving the same way.
Kindly provide some inputs on this.
Best Regards,
Sachin Verma
+44 7506740018Hi,
Thanks for viewing the thread. And happy to let you know that the issue was resolved.
The solution was:
Two formulas (local) were created, one including the formula variable with replacement path for ZD1, with exception aggregation on ZD1, and the other with formula variable with replacement path for ZD2, with exception aggregation on ZD2. Both these formulas are hidden.
Another formula (local) was created for u2018time takenu2019 = formula with ZD1 u2013 formula with ZD2, with exception aggregation total on u2018ZDOCNOu2019.
For the second instance, when one requires exception aggregation on records that has multiple values for keys, a nesting of formulas can be done displaying only the ones required.
For e.g. a formula with exception aggregation on say characteristic u2018item no.u2019 can be hidden, and included in another formula for exception aggregation on characteristic u2018document no.u2019. This is a typical case where one can achieve calculation before aggregation for a calculated key figure, formula or a counter.
Hope it might help someone, and saves time and effort for a similar issue posted.
Also would like to keep this thread open for exploring better solutions.
Regards,
Vijay -
Calculated key figures from multicubes before aggregation
Hi,
I am calculating a total using a calculated key figure
that has one key figure from a multicube and two other key figures from another multicube.
Also I factor the total using a variable with a replacement path on the dummy attribute (Constant) to "force" the calculation at the material level.
Cost = Cost(CUBE1) / Quantity(CUBE1) * Quantity(Cube2) * ZVRMATER1
Problem:
If I split the calculation this works before aggregation at the material level. Also this works fine using calculations that use key figures that must be calculated before aggregation if they all are from the same cube at the time. The required formula above will not work (zero divide) since during selection the OLAP processor retrieves in phases and with value 0 from the key figure of CUBE2.
Any suggestion on how to solve this without new back-end development?
Thanks.Hi,
I am calculating a total using a calculated key figure
that has one key figure from a multicube and two other key figures from another multicube.
Also I factor the total using a variable with a replacement path on the dummy attribute (Constant) to "force" the calculation at the material level.
Cost = Cost(CUBE1) / Quantity(CUBE1) * Quantity(Cube2) * ZVRMATER1
Problem:
If I split the calculation this works before aggregation at the material level. Also this works fine using calculations that use key figures that must be calculated before aggregation if they all are from the same cube at the time. The required formula above will not work (zero divide) since during selection the OLAP processor retrieves in phases and with value 0 from the key figure of CUBE2.
Any suggestion on how to solve this without new back-end development?
Thanks. -
Calculated key figures before aggregation
Hi,
I'm having trouble creating a new calculated key figure. Here's the situation.
I have two key figures: stock, value A. Now I want to create a new calculated key figure (in 3.x) using both key figures. The calculation would look something like: "stock * (value A == 0)". Now I want this key figure to work before aggregation. When creating this calculated key figure however I am unable to set the aggregation setting to before aggregation. Now, with any other key figure besides stock, this is no problem. Something like "profit * value A == 0)" works fine and I can set the aggregation setting to before aggregation. I suspect the reason I can't use stock in a calculated key figure set the calculate before aggregation is because of the exception aggregation of the stock key figure. It's set to last value in exception aggregation.
Does anyone know how to solve this problem? Thanks in advance.
AlexHi Alex,
please read this:
http://help.sap.com/saphelp_nw2004s/helpdata/en/75/21054da1392649948e5b94e4fc4bce/frameset.htm
http://help.sap.com/saphelp_nw2004s/helpdata/en/80/1a62f8e07211d2acb80000e829fbfe/frameset.htm
The reason that somtimes the propertie is available or not depends on the key figure type - e.g. if it is complex or not. I think that here is a lot of info available in the forum.
Regards,
Adem -
How to calculate key figure before aggregation for complex formular?
Hi, buddies
<b>Here's the simplified senario</b>:
I have a cube, in which the characteristics are 'Calendar Day' and 'Hour' (values are 01~24), and the key figures are stored by day and by hour.
What I need is very simple, a query to display calculated key figures only by Calendar Day. I don't need Hour information.
So I create a query: column charact is Calendar Day, rows are several calculated key figures.
<b>Now the problem is that</b>:
if I don't put 'Hour' as row in the query, I'll get WRONG result. But if I put 'Hour' as row in the query, I'll get CORRECT result, but all the 'Hour' details will display, which should be hided.
<b>I know the reason is that</b>:
the calculated key figure that I create should be calucated before aggregation, not after. But since the formular is pretty complex, I can't change the 'Time of Aggregation Calculation' in key figure's property. (It's greyed out.) So I have to put 'Hour' as row in the query to force calcuation 'before aggregation' in query and set the property 'Calculate Result As...' as 'Summary'.
<b>My question</b> is:
whether there's any other way to force calcuation 'before aggregation', so I don't have to put 'Hour' in the query.
If no, is there a simple way to hide the 'Hour' details and only display summary result ON THE QUERY LEVEL? (
<i>I can hide detail lines by using web template, or maybe using VB in excel. But I can't use either of them. I want to hide the details on the QUERY LEVEL. So I can use the query directly in any other reporting tools, like Visual Composer.</i>)
Any idea?
WeiHi, Sudeepta
Thanks for your reply.
I did try to set 'No display' for 'Hour'. The result is that the Characteristics 'Hour' doesn't appear on the query result, but the detailed line of key figures still display on the result. It looks like the followings: (I put summaries on the top/right)
Date 1/1 1/2 Overall result
KPI1 10 11 22 (sum line)
KPI2 20 21 41 (sum line)
KPI1 12 13 25 (detailed line)
KPI2 13 13 26 (detailed line)
KPI1 11 12 23 (detailed line)
KPI2 12 12 24 (detailed line)
I want to suppress all the detailed lines and leave sum lines on the result. -
Bex Issue : before aggregation
Hi,
I have a problem in Bex that I thought to solve with the "before aggregration" option in Bex Analyzer but this doesn't seem to be possible.
My query looks initially like this for 1 shipment 1344601 that is linked to 2 deliveries
Shipment Delivery Del.Quantity Counter Del.Quantity/Count
1344601 81209721 41.160 KG 2 20.580 KG
1344601 81209722 14.840 KG 1 14.840 KG
Resultrow .............56.000 KG 3 35.420 KG
This 35.420 KG is the right total delivery quantity for shipment 1344601. Note that counter is calculated via a formula with before aggregation. Also the Del. Quantity is included in a formula with before calculation.
When I now remove the drilldown on the delivery my result is wrong :
Shipment Del.Quantity Counter Del.Quantity/Count
1344601 56.000 KG 3 18.666.67 KG
Resultrw 56.000 KG 3 18.666.67 KG
The system is dividing 56.000 KG by 3 which leads to an incorrect result of 18.666.67 KG.
==> My problem is that I can't put the Del.Quantity/Count on calculation before aggregation, although Del.Quantity and Counter that are used in the calculation have both calculation before aggregation.
Via a little trick (include the calculation in a new calculated keyfigure where I multiply it by 1) I could put it on calculation before aggregation but then the query execution fails.
Does anyone know a solution for this behaviour as I think lots of you might have faced similar situations and I would like to avoid to solve this in data staging as this doesn't seem unsolvable in Bex to me...
Message was edited by: WimHi,
As per the my knowledge, we can use the properties of Before Aggregation in Bex Analyser.
for ex. when u excute your query, by default the result of the calculated key figure is generated after aggregation. But we can change this property to before aggregation by going to context menu of the calculated key figure for the analyer.
But it is considered as a bad practice in SAP.
If you want to use this option in query designer it not available,
because when we use calculated key figure in formulas it calculate as after aggregation. If you want to change it, we can change at analyser level.
Hope u understood.
Regards,
Vamsi
Assign points if useful. -
Warning before aggregation is osbsolete
Hi guru's
I'm migrating our BW system and in some queries we have the message Warning calculation before aggregation is obsolete.
We still use BW 3.x analyzer.
when i execute queries the message is only a warning and i can see result in my reports.
i need to check the data but do you know if the message is a warning because this functionnality does not existe in BI 7 analyzer tool and if i use Bex 3.x will the data be correct ?
Thanks
CyrilGood day Cyril,
When you migrate a query which has CKF with 'Before Aggregation', you will be requested to change it to 'after aggregation'. After turning on the option for 'After Aggregation query behaves same as what it used to do in BEx 3.5 with option 'B4 Ag'gregation'. Results are same.
The use of BEFORE aggregation was removed as this can cause a drain on the system resources and therefore cause performance problems. For this reason it was made obsolete with the 7.x system. The OLAP processor handles data differently in the 7.x systems so removing the before aggregation option should not cause too many problems for customers migrating over.
With this in mind, however, there are differences to BEFORE and AFTER aggregation. It may not affect the calculations you are using in your queries but you must be aware that some calculations are carried out at different times and this can cause hiccups. Most note-worthy would be when formulae are used and when replacement path variables are needed. In some cases, the necessary calculations may not be carried out and the figures may not be available which would not have been an issue in the 3.x system using before aggregation.
Check out SAP Note 1151957 which is excellent for understanding how the OLAP processor carries out calculations. It also details the differences between BEFORE and AFTER aggregation and should be very helpful for you going forward - particularly if you use formulae or replacement path functions.
Be aware that there are differences and there may be queries where you get a red X instead of a value. In most cases, this means rewriting a formula so that the processor can now accomodate the aggregation you need to achieve.
Hope this helps, Cyril.
Regards,
Karen -
Hi All,
We moved to NW2004S but we are still using BEx3.5
I have created a simple calculated kf(say Amt) at ODS level (Amt = qty*price).
The Amt numbers are coming incorrectly.I have used Before aggregation and it throws me an error " Before aggregation is not allowed for Amt".
Can some one please explain how can i achieve this.?
Thanks in advance.
Regards,
Rajrefer:
Before Aggregation in NW2004s(BI7)
/message/3943188#3943188 [original link is broken] -
Calculation before aggregation
Hello BW Guru's
What does this calculation before aggregation mean ?
In which situation we use the above setting ?
when we can use this option in Modelling and when we can use this option in reporting ?
I am zero with this.. please explain me with a real time example.
Full points will be assured for the best answer
many thanks in advance,
NIru.Hi,
An aggregate is a materialized, aggregated view of the data in an InfoCube. In an aggregate, the dataset of an InfoCube is saved redundantly and persistently in a consolidated form into the database.
How to create Aggregate for the cube.(for the example shown below)
step1
go to rsa1 transaction code , right click on the cube --->maintain aggregates ---create by your self
Step2
in the dimension Drag Region give the name of the aggregate .
after dragging in the aggregation selection type you will find * . that means it is assigned for all characteristics value.
or
right click on the * and select fixed value as NY( this will give aggregation values only for NY)
but in the example i have take * it is for all characteristic value ( means for all values NY and CA)
Step3
Now place the curser on the sigma symbol and activate the aggregate.
Step4
Now load the data to the cube , befor loading the data to the cube it a good practice of switching of the aggregate and switch on after loading.
this option can be obtain at top menu aggregate---> switch on of for queries that means the aggregates are available for the reporting to view.
by doing this this will increase the load performance and also the execution of the query will be fast
Step6
now open the report and execute
The scenario below shows you how to count the results of a calculated key figure in the BEx Query Designer.
You have loaded the following data into your InfoCube:
Before Aggregation
Region/ Customer /Sales Volume USD
NY / A /400
NY/ B /200
NY/ C /50
CA/ A /800
CA/ C /300
After Aggregation
Region/ SalesVolumeUSD
NY/ 650
CA/ 1100
Overall result 1750
hope this is clear
Santosh
Edited by: Santhosh Nagaraj on Oct 29, 2009 3:35 AM -
Hi guys,
I have been dealing with my issue for several months and havent found any solution.
I have two basic key figures which I need to multiply between each other.
Normaly it first aggregate and than multiply (which gives me wrong result) and when I use <b>before aggregation</b> It gives me <u>0 result</u> because those key figures are uploaded on different <b>Versions</b>. (one is actual - # and the other is version 20). So the it always multiply 0.
The reason for different versions is that one is Standard per unit (uploaded on the version 20) while the other one is Actual number of Units ( version #)
Do you have any idea how to work around this?
Thank you very much!!You can try out this in your develpment system.
Create a New keyfigure and Add it to Infocube and activate it. In update rules, Use update Method 'Formula'. there you can multiply already existing Keyfigures.Save the update rules and activate...makes ure update rules,transfer rules and infocube are active...
Now reload the data again...no problem if you have data already.
Filter the Qurey with 'last request loaded' its availabe under datapackage dimension..
Check whether you got values as required.if it not,delete this request and delete remove keyfigurte from update rules and infoprovider..
If it is working fine,you can try to reload all the data again without deleting,using export datasource. -
Incorrect values in available budget in report S_KI4_38000050
Dear Experts,
We are getting incorrect values in available budget column against Fun/Fund center -commitment item in report S_KI4_38000050.
Actually we have posted entries against fund center/commitment item without releasing budget and it allowed post entries due to deactivated availability control.
Before Posting FI entry:
Release Budget=0
Assigned=0
Available=0
Commitment=0
After Posting entry of Rs. 5000
Release=0
Assigned= -5000
Available=5000
Commitment= -5000
Ques-1 Why available is 5000?
Now if I released some amount say 10000 then,
Release=10000
Assigned= -5000
Available=15000
Commitment= -5000
Ques-2 How to correct values mentioned above?
As I think, the correct values should be:
Release=10000
Assigned= 5000
Available=5000
Commitment= 5000
Regards
ShishirExperts...Waiting for your suggestions..
-
For someone new to Adobe the forums and products can be bewildering. I've been advised to repost something I posted in Flash Data Integration in this forum.
Here is the link to the post I put there:
http://forums.adobe.com/message/2363777#2363777
I have reported this bug: http://bugs.adobe.com/jira/browse/FB-23750
I gather bugs get fixed if people vote for them to be fixed. Please vote for it to be fixed. It is serious, and you might not even realize you're suffering from it because the incorrect values returned by the query will seem perfectly plausible.
If the link above doesn't work, here it is again:
When I execute the following query in Flex and/or Lita:
select wrdid, uspelling from WRD WHERE uspelling = 'wingeard'
the results are:
uspelling...wrdid
wingeard 3137
Look at what comes back when I execute this query using .NET provider by Robert Simpson for SQLite and SQLite Manager by Mrinal Kant:
SELECT rowid, wrdid, uspelling
FROM WRD
WHERE (uspelling = 'wingeard')
rowid.......wrdid...........uspelling
3137........3042............wingeard
No wonder none of my queries with joins is working correctly in Flex.
wrdid is defined as "int" not INTEGER.
http://www.sqlite.org/lang_createtable.html (see INTEGER PRIMARY KEY section):
"The special behavior of INTEGER PRIMARY KEY is only available if the type name is exactly "INTEGER" (in any mixture of upper and lower case.) Other integer type names like "INT" or "BIGINT" or "SHORT INTEGER" or "UNSIGNED INTEGER" causes the primary key column to behave as an ordinary table column with integer affinity and a unique index, not as an alias for the rowid." [emphasis added]
Now, I happen to think the SQLite developers made a mistake here in failing to follow standards, preferring not to break legacy code. They'd rather break current code instead??? I would not characterize this as a "corner case" and the bug-at-hand is de facto evidence of that.Did you try running the queries I posted? What were your results with those?
What I am seeing is that when I use "int PRIMARY KEY" in a CREATE TABLE statement, that column becomes the special "rowid" column. I believe this is also what you are seeing.
However, what confuses me is how you're getting a table with three columns "rowid", "id", and "name" in the first place. When I run this SQL...
CREATE TABLE test
id int PRIMARY KEY,
name String
...I get a table with two columns: a normal column named "name", and a special primary key column named "id", which for this table is identical to the column represented by the rowid identifier.
However, if I understand correctly, your table has three columns, "id", "name", and the special primary key column (i.e. "rowid"). Is that right? Can you give me the SQL that was used to create the table, or tell me how the table was created (e.g. if you used a tool like Lita) so I can try to re-create your exact situation? That would really be very very helpful -- it was the only detail that was missing in your last post, so I had to guess on that one detail.
I tried something else to re-create your situation. I ran the following statement:
CREATE TABLE test
id int
name String
That gave me a table with two real columns plus the rowid column. Then I ran the three insert statements on that table, and when I ran the select statement I got the expected result:
id name
1 one
2 two
7 seven
Again, I'm guessing that your table was created differently than my test table, and that's the explanation for the difference.
Some other possibilities to consider:
The screen shot doesn't show a SQLResult object, so it seems that you're using some wrapper library or code to execute the query, or at least that you've copied the SQLResult.data Array to another variable named results. Although it seems less likely to me, it's possible that somewhere in that code something is getting scrambled. (But I'd rather rule out AIR as the underlying cause first before attempting to explore those paths.)
As a side note, if you really want the database to have three columns (the special rowid column and your two columns id and name), and you don't want id to be the special rowid column, then it sounds to me like you don't actually want to define id as the primary key. If you just want the id column to have a constraint that prevents duplicate values, you can define it as a UNIQUE column:
CREATE TABLE test
id int UNIQUE,
name String
That gives you the same database-enforced constraint of not allowing duplicate values, but it tells the database explicitly that id isn't the same thing as the rowid primary key. (You can still join another table to the id column even if it's not defined as the primary key.)
P.S. I'm sure you don't mean it this way, but using gigantic red text comes across like shouting -- it's very "loud". I'm trying my best to understand the issue you're having and help you resolve it, and using multiple colors and font sizes doesn't really make your post any more or less clear. Just because I ask you questions, or say that I'm seeing different results than you, doesn't mean I don't believe that you're seeing the results you're seeing. I've definitely seen strange variations and cases where something happens on my computer but others can't duplicate it on their computers -- so I believe that you are getting the results you're getting. I'm just trying to figure out how to make it so that I can also get those results, so that I can pass that on to the engineers who are in a position to make changes. -
Warning "Time of Calculation 'Before Aggregation' is obsolete" in BI 7.0
Hi Friends,
We have recently upgraded our BW system from BW 3.1 to BI 7.0. While executing one of the query in BI 7.0 i am getting the Warning Message "Time of Calculation 'Before Aggregation' is obsolete". I can run the query by ignoring the message and get the results. But I am not getting the correct result for some of the calculated key figures which has setting for Time of calculation as "Before Aggregation".
After doing some research i found that before aggregation is not allowed in BI 7.0. We are using queries created in 3.x environment. There is some work around which talks about creating new calculated key figure with after aggregation setting and all. But in my case it not feasible as there are so many queries based on those calculated key figures.
Does any one had the similar situation? Is there any other way to correct this problem?
I would appreciate your help in this regards.
Thanks,
ManmitHi
Try SAP notes 935903.
Symptom
Calculated Key Figures "Existance Indicator" with aggregation behaviour "Before Aggregation" will get now with NW 2004s warning popup "Time of calculation 'Before Aggregation' is obsolete" during execution.
this may be helpful.
Also Check the below thread
/message/2986338#2986338 [original link is broken]
Regards
Shilpa
Edited by: Shilpa Vinayak on Oct 10, 2008 4:23 AM -
How to fix 'Unexpected error: Incorrect value: Location URL' in WSDL
Hi All,
Using SOAMANAGER transaction, I created a service ECC_CUSTOMERQUOTEERPCRTRC and its binding 'ECC_CUSTOMERQUOTEERPCRTRC_binding' using the Create Service option under the tab Configurations and using the web service definition 'ECC_CUSTOMERQUOTEERPCRTRC'. When I click on the link "Open WSDL document for selected binding" under the tab 'Overview', I get the following XML code in the popup window for the WSDL.
- <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
- <soap:Body>
- <soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Unexpected error: Incorrect value: Location URL for subject IF {http</faultstring>
- <detail xmlns:slibfault="http://xml.sap.com/2005/11/esi/slib/fault/">
<slibfault:timestamp>Wed, 17 Nov 2010 22:29:02 GMT</slibfault:timestamp>
- <slibfault:exception>
<slibfault:text>Incorrect value: Location URL for subject IF {http://sap.com/xi/APPL/Global2}:CustomerQuoteERPCreateRequestConfirmation_In not found</slibfault:text>
<slibfault:position program="CL_SIDL_SUBJECT_ADAPTER=======CP" include="CL_SIDL_SUBJECT_ADAPTER=======CM006" line="47" />
</slibfault:exception>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
The XML code for nthe WSDL displays an error 'Unexpected error: Incorrect value: Location URL for subject IF '. It looks like the code could find the required URL. Please let me know how to fix this error.
Thanks in advance.
--R DHello.
In SOAMANAGER delete your "unexpected" service (endpoint).
Then create it again.
If same error will occurs - try to delete all definitions of this service (include sicf-transaction) and then create it completely again.
Hope it helps. -
Java returning incorrect values for width and height of a Tiff image
I have some TIFF images (sorry, I cannot post them b/c of there confidential nature) that are returning the incorrect values for the width and height. I am using Image.getWidth(null) and have tried the relevant methods from BufferedImage. When I open the same files in external viewers (Irfanview, MS Office Document Imaging) they look fine and report the "correct" dimensions. When I re-save the files, my code works fine. Obviously, there is something wrong with the files, but why would the Java code fail and not the external viewers? Is there some way I can detect file problems?
Here is the code, the relevant section is in the print() routine.
* ImagePrinter.java
* Created on Feb 27, 2008
* Created by tso1207
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.FileImageInputStream;
import javax.imageio.stream.ImageInputStream;
import com.shelter.io.FileTypeIdentifier;
public class ImagePrinter extends FilePrintable
private final ImageReader _reader;
private final int _pageCount;
private final boolean _isTiff;
//for speed we will hold current page info in memory
private Image _image = null;
private int _imgWidth = 0;
private int _imgHeight = 0;
private int _currentPage = -1;
public ImagePrinter(File imageFile) throws IOException
super(imageFile);
ImageInputStream fis = new FileImageInputStream(getFile());
Iterator readerIter = ImageIO.getImageReaders(fis);
ImageReader reader = null;
while (readerIter.hasNext())
reader = (ImageReader) readerIter.next();
reader.setInput(fis);
_reader = reader;
int pageCount = 1;
String mimeType = FileTypeIdentifier.getMimeType(imageFile, true);
if (mimeType.equalsIgnoreCase("image/tiff"))
_isTiff = true;
pageCount = reader.getNumImages(true);
else
_isTiff = false;
_pageCount = pageCount;
public int print(java.awt.Graphics g, java.awt.print.PageFormat pf, int pageIndex)
throws java.awt.print.PrinterException
int drawX = 0, drawY = 0;
double scaleRatio = 1;
if (getCurrentPage() != (pageIndex - getPageOffset()))
try
setCurrentPage(pageIndex - getPageOffset());
setImage(_reader.read(getCurrentPage()));
setImgWidth(getImage().getWidth(null));
setImgHeight(getImage().getHeight(null));
catch (IndexOutOfBoundsException e)
return NO_SUCH_PAGE;
catch (IOException e)
throw new PrinterException(e.getLocalizedMessage());
if (!_isTiff && getImgWidth() > getImgHeight())
pf.setOrientation(PageFormat.LANDSCAPE);
else
pf.setOrientation(PageFormat.PORTRAIT);
Graphics2D g2 = (Graphics2D) g;
g2.translate(pf.getImageableX(), pf.getImageableY());
g2.setClip(0, 0, (int) pf.getImageableWidth(), (int) pf.getImageableHeight());
scaleRatio =
(double) ((getImgWidth() > getImgHeight())
? (pf.getImageableWidth() / getImgWidth())
: (pf.getImageableHeight() / getImgHeight()));
//check the scale ratio to make sure that we will not write something off the page
if ((getImgWidth() * scaleRatio) > pf.getImageableWidth())
scaleRatio = (pf.getImageableWidth() / getImgWidth());
else if ((getImgHeight() * scaleRatio) > pf.getImageableHeight())
scaleRatio = (pf.getImageableHeight() / getImgHeight());
int drawWidth = getImgWidth();
int drawHeight = getImgHeight();
//center image
if (scaleRatio < 1)
drawX = (int) ((pf.getImageableWidth() - (getImgWidth() * scaleRatio)) / 2);
drawY = (int) ((pf.getImageableHeight() - (getImgHeight() * scaleRatio)) / 2);
drawWidth = (int) (getImgWidth() * scaleRatio);
drawHeight = (int) (getImgHeight() * scaleRatio);
else
drawX = (int) (pf.getImageableWidth() - getImgWidth()) / 2;
drawY = (int) (pf.getImageableHeight() - getImgHeight()) / 2;
g2.drawImage(getImage(), drawX, drawY, drawWidth, drawHeight, null);
g2.dispose();
return PAGE_EXISTS;
* <br><br>
* Created By: TSO1207 - John Loyd
* @since version XXX
* @return
public int getPageCount()
return _pageCount;
public void destroy()
setImage(null);
try
_reader.reset();
_reader.dispose();
catch (Exception e)
System.gc();
* <br><br>
* Created By: TSO1207 - John Loyd
* @since Mar 25, 2008
* @return
public Image getImage()
return _image;
* <br><br>
* Created By: TSO1207 - John Loyd
* @since Mar 25, 2008
* @return
public int getImgHeight()
return _imgHeight;
* <br><br>
* Created By: TSO1207 - John Loyd
* @since Mar 25, 2008
* @return
public int getImgWidth()
return _imgWidth;
* <br><br>
* Created By: TSO1207 - John Loyd
* @since Mar 25, 2008
* @param image
public void setImage(Image image)
_image = image;
* <br><br>
* Created By: TSO1207 - John Loyd
* @since Mar 25, 2008
* @param i
public void setImgHeight(int i)
_imgHeight = i;
* <br><br>
* Created By: TSO1207 - John Loyd
* @since Mar 25, 2008
* @param i
public void setImgWidth(int i)
_imgWidth = i;
* <br><br>
* Created By: TSO1207 - John Loyd
* @since Mar 25, 2008
* @return
public int getCurrentPage()
return _currentPage;
* <br><br>
* Created By: TSO1207 - John Loyd
* @since Mar 25, 2008
* @param i
public void setCurrentPage(int i)
_currentPage = i;
}Edited by: jloyd01 on Jul 3, 2008 8:26 AMFigured it out. The files have a different vertical and horizontal resolutions. In this case the horizontal resolution is 200 DPI and the vertical is 100 DPI. The imgage width and height values are based on those resolution values. I wrote a section of code to take care of the problem (at least for TIFF 6.0)
private void setPageSize(int pageNum) throws IOException
IIOMetadata imageMetadata = _reader.getImageMetadata(pageNum);
//Get the IFD (Image File Directory) which is the root of all the tags
//for this image. From here we can get all the tags in the image.
TIFFDirectory ifd = TIFFDirectory.createFromMetadata(imageMetadata);
double xPixles = ifd.getTIFFField(256).getAsDouble(0);
double yPixles = ifd.getTIFFField(257).getAsDouble(0);
double xRes = ifd.getTIFFField(282).getAsDouble(0);
double yres = ifd.getTIFFField(283).getAsDouble(0);
int resUnits = ifd.getTIFFField(296).getAsInt(0);
double imageWidth = xPixles / xRes;
double imageHeight = yPixles / yres;
//if units are in CM convert ot inches
if (resUnits == 3)
imageWidth = imageWidth * 0.3937;
imageHeight = imageHeight * 0.3937;
//convert to pixles in 72 DPI
imageWidth = imageWidth * 72;
imageHeight = imageHeight * 72;
setImgWidth((int) Math.round(imageWidth));
setImgHeight((int) Math.round(imageHeight));
setImgAspectRatio(imageWidth / imageHeight);
}
Maybe you are looking for
-
I have 2 phones attached to my apple ID account and when I text message that person, I am getting a duplicate message sent back to me. How do I stop this from happening?
-
Hi all, Plz tell me logic how to calculate Opening balance and Closing balance of vendor of any particular date of month........... Thanks in Advance.
-
How to Configure Invoice Address tab on Purchase Order - Header Level
Hi Gurus Please assist My client want to add the Invoice address on the Purchase Order level Tab, it must be automatically pull through to all the Purchase Orders as they have one Invoicing address. Currently the suppliers send invoices to plants ins
-
How to send output of one Bapi to another Bapi??
dear all, I am having two BAPIs. From one Bapi I am getting value(Output) in one dropdown box. Now my problem is how to give output of first BAPI(in drop down box) as input to second BAPI which should display in second drop down
-
Invalid package file on Asus fonepad with android 4.1.2
Seems to be a compatibility problem installing Adobe AIR on to an Asus phonepad returning "error package file is invalid". Is there a fix in the air? Several other fonepad users have reported the same problem on Google play. wotdyano.